This commit is contained in:
Stefan Monnier 2007-04-24 21:10:28 +00:00
parent 4ec97fadab
commit b7c46cf04a
2503 changed files with 1 additions and 2442969 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

47
.gitignore vendored
View file

@ -1,47 +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
data
emacs*.tar.gz
leim*.tar.gz
lock
site-lisp
update.log

2759
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.

View file

@ -1,227 +0,0 @@
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
See end for license conditions.
Contributing to Emacs
Emacs is a collaborative project and we encourage contributions from
anyone and everyone. If you want to contribute in the way that will
help us most, we recommend (1) fixing reported bugs and (2)
implementing the feature ideas in etc/TODO. However, if you think of
new features to add, please suggest them too -- we might like your
idea. Porting to new platforms is also useful, when there is a new
platform, but that is not common nowadays.
For documentation on how to develop Emacs changes, refer to the Emacs
Manual and the Emacs Lisp Reference Manual (both included in the Emacs
distribution). The web pages in http://www.gnu.org/software/emacs
contain additional information.
You may also want to submit your change so that can be considered for
inclusion in a future version of Emacs (see below).
If you don't feel up to hacking Emacs, there are many other ways to
help. You can answer questions on the mailing lists, write
documentation, find and report bugs, contribute to the Emacs web
pages, or develop a package that works with Emacs.
Here are some style and legal conventions for contributors to Emacs:
* Coding Standards
Contributed code should follow the GNU Coding Standard.
If it doesn't, we'll need to find someone to fix the code before we
can use it.
Emacs has certain additional style and coding conventions.
Ref: http://www.gnu.org/prep/standards_toc.html
Ref: GNU Coding Standards Info Manual
Ref: The "Tips" Appendix in the Emacs Lisp Reference.
* Copyright Assignment
We can accept small changes without legal papers, and for medium-size
changes a copyright disclaimer is ok too. To accept substantial
contributions from you, we need a copyright assignment form filled out
and filed with the FSF.
Contact us at emacs-devel@gnu.org to obtain the relevant forms.
* Getting the Source Code
The latest version of Emacs can be downloaded using CVS or Arch from
the Savannah web site. It is important to write your patch based on
this version; if you start from an older version, your patch may be
outdated when you write it, and maintainers will have hard time
applying it.
After you have downloaded the CVS source, you should read the file
INSTALL.CVS for build instructions (they differ to some extent from a
normal build).
Ref: http://savannah.gnu.org/projects/emacs
* Submitting Patches
Every patch must have several pieces of information before we
can properly evaluate it.
When you have all these pieces, bundle them up in a mail message and
send it to emacs-pretest-bug@gnu.org or emacs-devel@gnu.org.
All subsequent discussion should also be sent to the mailing list.
** Description
For bug fixes, a description of the bug and how your patch fixes this
bug.
For new features, a description of the feature and your
implementation.
** ChangeLog
A ChangeLog entry as plaintext (separate from the patch).
See the various ChangeLog files for format and content. Note that,
unlike some other projects, we do require ChangeLogs also for
documentation, i.e. Texinfo files.
Ref: "Change Log Concepts" node of the GNU Coding Standards Info
Manual, for how to write good log entries.
** The patch itself.
Please use "Context Diff" format.
If you are accessing the CVS repository use
cvs update; cvs diff -cp
else, use
diff -cp OLD NEW
If your version of diff does not support these options, then get the
latest version of GNU Diff.
** Mail format.
We prefer to get the patches as inline plain text.
Please be aware of line wrapping which will make the patch unreadable
and useless for us. To avoid that, you can use MIME attachments or,
as a last resort, uuencoded gzipped text.
** Please reread your patch before submitting it.
** Do not mix changes.
If you send several unrelated changes together, we will ask you to
separate them so we can consider each of the changes by itself.
* Coding style and conventions.
** Mandatory reading:
The "Tips and Conventions" Appendix of the Emacs Lisp Reference.
** Avoid using `defadvice' or `eval-after-load' for Lisp code to be
included in Emacs.
** Remove all trailing whitespace in all source and text files.
** Use ?\s instead of ? in Lisp code for a space character.
* Supplemental information for Emacs Developers.
** Write access to Emacs' CVS repository.
Once you become a frequent contributor to Emacs, we can consider
giving you write access to the CVS repository.
** Emacs Mailing lists.
Discussion about Emacs development takes place on emacs-devel@gnu.org.
Bug reports for released versions are sent to bug-gnu-emacs@gnu.org.
Bug reports for development versions are sent to emacs-pretest-bug@gnu.org.
You can subscribe to the mailing lists at savannah.gnu.org/projects/emacs.
You can find the mailing lists archives at lists.gnu.org or gmane.org.
** Document your changes.
Think carefully about whether your change requires updating the
documentation. If it does, you can either do this yourself or add an
item to the NEWS file.
If you document your change in NEWS, please mark the NEWS entry with
the documentation status of the change: if you submit the changes for
the manuals, mark it with "+++"; if it doesn't need to be documented,
mark it with "---"; if it needs to be documented, but you didn't
submit documentation changes, leave the NEWS entry unmarked. (These
marks are checked by the Emacs maintainers to make sure every change
was reflected in the manuals.)
** Understanding Emacs Internals.
The best way to understand Emacs Internals is to read the code,
but the nodes "Tips" and "GNU Emacs Internals" in the Appendix
of the Emacs Lisp Reference Manual may also help.
The file etc/DEBUG describes how to debug Emacs bugs.
* How to Maintain Copyright Years for GNU Emacs
See admin/notes/copyright.
** Our lawyer says it is ok if we add, to each file that has been in Emacs
since Emacs 21 came out in 2001, all the subsequent years. We don't
need to check whether *that file* was changed in those years.
It's sufficient that *Emacs* was changed in those years (and it was!).
** For those files that have been added since then, we should add
the year it was added to Emacs, and all subsequent years.
** For the refcards under etc/, it's ok to simply use the latest year
(typically in a `\def\year{YEAR}' expression) for the rendered copyright
notice, while maintaining the full list of years in the copyright notice
in the comments.
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
Local variables:
mode: outline
paragraph-separate: "[ ]*$"
end:

339
COPYING
View file

@ -1,339 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General
Public License instead of this License.

6490
ChangeLog

File diff suppressed because it is too large Load diff

6
FTP
View file

@ -1,6 +0,0 @@
For information about how to obtain GNU Emacs and other GNU software
by FTP, please see <http://www.gnu.org/order/ftp.html>.
Information about Emacs is also available at
<http://www.gnu.org/software/emacs/>.

925
INSTALL
View file

@ -1,925 +0,0 @@
GNU Emacs Installation Guide
Copyright (C) 1992, 1994, 1996, 1997, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007 Free Software Foundation, Inc.
See the end of the file for license conditions.
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://ftp.simplesystems.org/pub/libpng/png/
. libz (for PNG): http://www.zlib.net/
. 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://sourceforge.net/projects/libungif
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
The Emacs distribution does not include fonts and does not install
them. You must do that 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://czyborra.com/unifont/> (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/pub/XFree86/> 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 Unicode fonts etl-unicode.tar.gz are available from
<URL:ftp://ftp.x.org/contrib/fonts/> and
<URL:ftp://ftp.xfree86.org/pub/mirror/X.Org/contrib/fonts/>. These
fonts can also be used by ps-print and ps-mule to print Unicode
characters.
Finally, the Web pages <URL:http://www.nongnu.org/freefont/index.html>
and <URL:http://www.nongnu.org/freefont/resources.html> list a large
number of free Unicode 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 Red Hat. 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 from <http://www.lesstif.org>. Compiling with
LessTif or Motif causes a standard File Selection Dialog to pop up
when you invoke file commands with the mouse. 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.4 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 features 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, CPP and CC
before running `configure'. CPP is the command which invokes the
preprocessor, CPPFLAGS lists the options passed to it, 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.
For some libraries, like Gtk+, fontconfig and ALSA, `configure' use
pkg-config to find where those libraries are installed.
If you want pkg-config to look in special directories, you have to set
the environment variable PKG_CONFIG_PATH to point to the directories
where the .pc-files for those libraries are.
For example:
PKG_CONFIG_PATH='/usr/local/alsa/lib/pkgconfig:/opt/gtk+-2.8/lib/pkgconfig' \
./configure
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/share/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/share/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/share/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 `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', and `vcdiff' 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.
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.

View file

@ -1,102 +0,0 @@
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
See the end of the file for license conditions.
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 using the following
alternative procedure after you have done "make bootstrap" at least
once:
$ ./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 the above partial 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, except that the value of the
EMACS variable on the Make command line might be different, e.g.,
../bin/emacs.exe or some such.
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 are
also known 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
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.

View file

@ -1,223 +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/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
Jay Belanger
Calc
lisp/calc/*
etc/calccard.tex
man/calc.texi
==============================================================================
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,814 +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, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
# 2001, 2002, 2003, 2004, 2005, 2006, 2007 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., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, 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@
# The root of the directory tree for read-only architecture-independent
# data files. ${datadir}, ${infodir} and ${mandir} are based on this.
datarootdir=@datarootdir@
# 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@
INFO_FILES=ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq \
elisp eintr emacs emacs-mime eshell eudc flymake \
forms gnus idlwave info message mh-e newsticker org pcl-cvs \
pgg reftex sc ses sieve speedbar tramp vip viper widget \
woman smtpmail url rcirc erc
# 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 =
# We use gzip to compress installed .el files.
GZIP_PROG = @GZIP_PROG@
# ============================= 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 = $(DESTDIR)${etcdir} $(DESTDIR)${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 built 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
AUTOCONF_INPUTS = @MAINT@ $(srcdir)/configure.in $(srcdir)/m4/getopt.m4
$(srcdir)/configure: $(AUTOCONF_INPUTS)
cd ${srcdir} && autoconf
$(srcdir)/src/config.in: $(srcdir)/src/stamp-h.in
@true
$(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS)
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} $(DESTDIR)${bindir}/$(EMACSFULL)
-chmod 1755 $(DESTDIR)${bindir}/$(EMACSFULL)
rm -f $(DESTDIR)${bindir}/$(EMACS)
-ln $(DESTDIR)${bindir}/$(EMACSFULL) $(DESTDIR)${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 $(DESTDIR)${archlibdir}/$$f; \
else true; fi ; \
done
if test "${carbon_appdir}" != ""; then \
umask 022; mkdir -p $(DESTDIR)${carbon_appdir}/Emacs.app; \
(cd mac/Emacs.app; (tar -chf - . | \
(cd $(DESTDIR)${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.
## FIXME
## Should only install the DOC- file appropriate to this build, not DOC-*.
## http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-01/msg00417.html
## (fix available for consideration post-release).
## 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 $(DESTDIR)${lispdir}/subdirs.el
$(srcdir)/update-subdirs $(DESTDIR)${lispdir}
if [ -f $(DESTDIR)${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))") \
> $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el; \
fi
chmod a+r $(DESTDIR)${datadir}/emacs/${version}/site-lisp/subdirs.el
-if [ -f $(DESTDIR)${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))") \
> $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el; \
fi
-chmod a+r $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el
-unset CDPATH; \
if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \
then \
echo "Copying etc/DOC-* to $(DESTDIR)${docdir} ..." ; \
(cd ./etc; tar -chf - DOC*) \
|(cd $(DESTDIR)${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
(cd $(DESTDIR)$(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 $(DESTDIR)${lispdir}; /bin/pwd)` ] \
&& [ x`(cd ${srcdir}/lisp; /bin/pwd)` != x`(cd ./lisp; /bin/pwd)` ]; \
then \
echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \
(cd lisp; tar -chf - *.el *.elc) \
|(cd $(DESTDIR)${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
(cd $(DESTDIR)${lispdir}; find . -exec chown $${LOGNAME:-$$USERNAME} {} ';') ; \
else true; fi
-unset CDPATH; \
if [ -n "${GZIP_PROG}" ]; \
then \
echo "Compressing *.el ..." ; \
(cd $(DESTDIR)${lispdir}; for f in `find . -name "*.elc" -print`; do \
${GZIP_PROG} -9n `echo $$f|sed 's/.elc$$/.el/'` ; \
done) \
else true; fi
-unset CDPATH; \
thisdir=`/bin/pwd`; \
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
then \
(cd $(DESTDIR)${infodir}; \
if [ -f dir ]; then true; \
else \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/dir $(DESTDIR)${infodir}/dir; \
chmod a+r $(DESTDIR)${infodir}/dir); \
fi; \
cd ${srcdir}/info ; \
for elt in $(INFO_FILES); do \
for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \
${INSTALL_DATA} $$f $(DESTDIR)${infodir}/$$f; \
chmod a+r $(DESTDIR)${infodir}/$$f; \
done; \
done); \
else true; fi
-unset CDPATH; \
thisdir=`/bin/pwd`; \
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
then \
for elt in $(INFO_FILES); do \
(cd $${thisdir}; \
${INSTALL_INFO} --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \
done; \
else true; fi
-chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} $(DESTDIR)${datadir}/emacs/site-lisp ${COPYDESTS} $(DESTDIR)${infodir}
thisdir=`/bin/pwd`; \
cd ${srcdir}/etc; \
for page in emacs emacsclient etags ctags ; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/etc/$${page}.1 $(DESTDIR)${man1dir}/$${page}${manext}; \
chmod a+r $(DESTDIR)${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 $(DESTDIR)${datadir} ]; then true; else \
$(srcdir)/mkinstalldirs $(DESTDIR)${datadir}; \
chmod a+r $(DESTDIR)${datadir};\
fi
$(srcdir)/mkinstalldirs ${COPYDESTS} $(DESTDIR)${infodir} $(DESTDIR)${man1dir} \
$(DESTDIR)${bindir} $(DESTDIR)${docdir} $(DESTDIR)${libexecdir} \
$(DESTDIR)${datadir}/emacs/site-lisp \
$(DESTDIR)${datadir}/emacs/${version}/site-lisp \
$(DESTDIR)`echo ${locallisppath} | sed 's,:, $(DESTDIR),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 $(DESTDIR)${lispdir} $(DESTDIR)${etcdir} ; do \
if [ -d $${dir} ]; then \
case `(cd $${dir} ; /bin/pwd)` in \
`(cd ${srcdir} ; /bin/pwd)`* ) ;; \
* ) rm -rf $${dir} ;; \
esac ; \
case $${dir} in \
$(DESTDIR)${datadir}/emacs/${version}/* ) \
rm -rf $(DESTDIR)${datadir}/emacs/${version} \
;; \
esac ; \
fi ; \
done
(cd $(DESTDIR)${archlibdir} && rm -f fns-*)
-rm -rf $(DESTDIR)${libexecdir}/emacs/${version}
(cd $(DESTDIR)${infodir} && \
for elt in $(INFO_FILES); do \
$(INSTALL_INFO) --remove --info-dir=. $$elt; \
for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \
rm -f $$f; \
done; \
done;)
(cd $(DESTDIR)${man1dir} && rm -f emacs${manext} emacsclient${manext} etags${manext} ctags${manext})
(cd $(DESTDIR)${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 FRC
$(MAKE) $(MFLAGS) info bootstrap-build
bootfast: bootstrap-clean-before-fast FRC
$(MAKE) $(MFLAGS) info bootstrap-build
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)
(cd leim; $(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)

112
README
View file

@ -1,112 +0,0 @@
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
See the end of the file for license conditions.
This directory tree holds version 22.0.98 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU
Emacs on various systems, once you have unpacked or checked out the
entire Emacs file tree.
See the file etc/NEWS for information on new features and other
user-visible changes in recent versions of Emacs.
The file etc/PROBLEMS contains information on many common problems that
occur in building, installing and running Emacs.
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. Please send bug reports for released
versions of Emacs sent to the mailing list bug-gnu-emacs@gnu.org.
Please send bug reports for pretest versions of Emacs, and versions
from the Savannah.gnu.org repository, to emacs-pretest-bugs@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.
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.

View file

@ -1,437 +0,0 @@
2007-02-03 Eli Zaretskii <eliz@gnu.org>
* nt/makedist.bat: Change EOL format to DOS. Don't use
redirection characters in REM lines.
2007-01-27 Jan Dj,Ad(Brv <jhd@winter.localdomain>
* FOR-RELEASE: Removed Gtk/Xft issue.
2007-01-01 Miles Bader <miles@gnu.org>
* quick-install-emacs (get_config_var): Deal with weird magic
string inserted by recent versions of autoconf.
2006-11-25 Juanma Barranquero <lekktu@gmail.com>
* admin.el (set-version): Set version number in
lib-src/makefile.w32-in.
2006-11-06 Reiner Steib <Reiner.Steib@gmx.de>
* FOR-RELEASE (BUGS): Remove "Build failure under Suse 10.0" was
due to a local miss-configuration.
2006-10-28 Chong Yidong <cyd@stupidchicken.com>
* make-announcement (OLD): Remove LEIM references in announcement
since it is now built-in.
2006-10-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* admin.el (set-version): Set version numbers in "mac" subdirectory.
2006-10-03 Kenichi Handa <handa@m17n.org>
* FOR-RELEASE (BUGS): "An iso-8859-6 cannot be saved" fixed.
2006-08-13 Chong Yidong <cyd@stupidchicken.com>
* FOR-RELEASE: Elisp manual checking completed.
2006-07-17 Reiner Steib <Reiner.Steib@gmx.de>
* FOR-RELEASE: Update refcard section.
2006-07-14 Kim F. Storm <storm@cua.dk>
* FOR-RELEASE (BUGS): High cpu load on windows server sockets fixed.
2006-07-09 Kim F. Storm <storm@cua.dk>
* README: Use outline format. Add FOR-RELEASE.
2006-06-27 Chong Yidong <cyd@stupidchicken.com>
* FOR-RELEASE: Checking of info.texi done.
2006-06-08 Reiner Steib <Reiner.Steib@gmx.de>
* FOR-RELEASE: Update refcard section.
2006-06-07 Reiner Steib <Reiner.Steib@gmx.de>
* FOR-RELEASE: Update refcard section.
2006-05-25 Chong Yidong <cyd@stupidchicken.com>
* FOR-RELEASE: Key sequence elisp node done.
2006-05-24 Reiner Steib <Reiner.Steib@gmx.de>
* FOR-RELEASE: Update refcard translations. Add coding cookie.
2006-05-21 Chong Yidong <cyd@mit.edu>
* FOR-RELEASE: point-entered /point-left bug fixed.
2006-05-12 Eli Zaretskii <eliz@gnu.org>
* FOR-RELEASE: Spell-checking the manuals is now done; remove the
entry.
2006-05-06 Bill Wohler <wohler@newt.com>
* FOR-RELEASE: MH-E 8.0 has been released, so removed reminder
about it.
2006-04-17 Ramprasad B <ramprasad_i82@yahoo.com>
* ./* (Copyright): Updated Copyright year(s).
2006-02-24 Reiner Steib <Reiner.Steib@gmx.de>
* FOR-RELEASE (BUGS): Add URLs/MIDs.
2006-02-20 Kim F. Storm <storm@cua.dk>
* FOR-RELEASE (NEW FEATURES): Completed work on this item:
Rework how fringe bitmaps are defined and used.
Currently, bitmap usage and bitmap appearence are "mixed-up" in a
one-level representation. It would be cleaner to split the
representation into a two-level model where first level maps
bitmap usage to a bitmap name, and second level maps bitmap name to
a bitmap appearence.
2006-01-27 Chong Yidong <cyd@stupidchicken.com>
* FOR-RELEASE: String allocation bugs fixed.
2005-12-13 Bill Wohler <wohler@newt.com>
* FOR-RELEASE: Ensure MH-E 8.0 has been released.
2005-12-09 Reiner Steib <Reiner.Steib@gmx.de>
* FOR-RELEASE (DOCUMENTATION): Remove message-mail, gnus-*
completing-read-multiple, mail-extract-address-components,
mail-mode, quail-define-package, save-buffer and
ucs-set-table-for-input from doc strings item (Done).
2005-11-28 Chong Yidong <cyd@stupidchicken.com>
* FOR-RELEASE: Icons installed. Partial completion bug fixed.
2005-11-11 Kim F. Storm <storm@cua.dk>
* FOR-RELEASE (FATAL ERRORS): Fix infinite loop in redisplay
when displaying a non-breaking space in an overlay string.
2005-10-30 Chong Yidong <cyd@stupidchicken.com>
* FOR-RELEASE: Init file change implemented.
2005-10-27 Chong Yidong <cyd@stupidchicken.com>
* FOR-RELEASE: Fringe angle bitmap at eob fixed.
2005-10-19 Chong Yidong <cyd@stupidchicken.com>
* FOR-RELEASE (New features): max-image-size implemented.
(Bugs): split-window done, by Kim F. Storm.
2005-10-17 Bill Wohler <wohler@newt.com>
* FOR-RELEASE (DOCUMENTATION): Removed lisp/toolbar from list
since it's gone. Also marked mh-e as done.
2005-10-11 Juanma Barranquero <lekktu@gmail.com>
* FOR-RELEASE (FATAL ERRORS): Remove item about JPEG
libraries on Windows (Done).
2005-10-01 Jason Rumney <jasonr@gnu.org>
* admin.el (set-version): Set version numbers in nt/emacs.rc.
2005-08-31 Romain Francoise <romain@orebokech.com>
* FOR-RELEASE: (New features): Remove vhdl-mode.el update
item (Done).
2005-08-27 Romain Francoise <romain@orebokech.com>
* FOR-RELEASE (Bugs): Remove compile-internal item (Done).
2005-07-04 Lute Kamstra <lute@gnu.org>
Update FSF's address in GPL notices.
2005-06-10 Lute Kamstra <lute@gnu.org>
* admin.el (set-version): Set version in lisp manual too.
* make-tarball.txt: Commit lispref/elisp.texi too.
2005-06-04 Richard M. Stallman <rms@gnu.org>
* emacs-pretesters: Refer to etc/DEBUG instead of duplicating it.
Other cleanups.
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
;; add-log-time-zone-rule: t
;; End:
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006,
2007 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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
;;; arch-tag: 97728c77-77c0-4156-b669-0e8c07d94e5a

View file

@ -1,93 +0,0 @@
Tasks needed before the next release.
* TO BE DONE SHORTLY BEFORE RELEASE
** Check for widow and orphan lines in manuals;
make sure all the pages really look ok in the manual as formatted.
** Regenerate the postscript files of the reference cards in etc.
** Ask maintainers of refcard translations to update them.
Requests to have been sent out on 2006-05-23 (Reiner Steib).
LANG Translator Status
cs Pavel Janík Can't work on it now.
de Sven Joachim Done
fr Eric Jacoboni Done
pl Włodek Bzyl Done
pt-br Rodrigo Real Done
ru Alex Ott Done
sk Miroslav Vaško No response
Reminders sent out on 2006-06-08.
* WINDOWS SUPPORT BUGS.
These don't need to be fixed before a release, but we call the
attention of Windows users to fixing them.
** Drew Adams 12 Aug bug rpt: overlay display artifact: trace left behind
Windows only bug. Bug appears only when Cleartype enabled, probably related
to the hack introduced on 2005-07-01 to fix some other Cleartype problem.
** henman@it.to-be.co.jp 09 Aug 2006: ispell.el problem on Cygwin.
(Did we decide that is unreproducible?)
* BUGS
** python.el legal problem?
http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-04/msg00459.html
** rcyeske@gmail.com, April 22: Failure to build on OpenBSD macppc.
OpenBSD compilation works on i386.
** bojohan+news@dd.chalmers.se, April 23: delete-overlay causes recentering
(This is now the same as the spurious scrolling bug.)
** finish fixing locate.el
** angeli@caeruleus.net, April 23: Excessive refontification when setting
jit-lock-context-unfontify-pos
* DOCUMENTATION
** 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.eo
etc/TUTORIAL.es Marcelo Toledo
etc/TUTORIAL.fr ttn
etc/TUTORIAL.it ttn
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
coding: utf-8
end:

View file

@ -1,92 +0,0 @@
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
See the end of the file for license conditions.
The admin directory
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.
* Instructions and scripts used to prepare an Emacs release.
** FOR-RELEASE
Living list of activities that must be completed before the next release.
** make-tarball.txt
Instructions to create pretest or release tarballs, annoucements, etc.
** admin.el
Utilities for setting version numbers and alike.
** make-announcement, make-changelog-diff
Scripts used to prepare release announcements.
* Scripts that can be used to build and test Emacs.
** build-configs
Build Emacs in various configurations.
** make-emacs
Build Emacs in various ways.
** quick-install-emacs
Install emacs quickly (`incrementally').
** 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).
** 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.
** revdiff
Get CVS diffs of files.
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
Local variables:
mode: outline
paragraph-separate: "[ ]*$"
end:
# arch-tag: 812b9461-bc0a-46a7-925e-24bd41118463

View file

@ -1,162 +0,0 @@
;;; admin.el --- utilities for Emacs administration
;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
;; 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., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, 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."))))))
(set-version-in-file root "lispref/elisp.texi" version
(rx (and "EMACSVER" (1+ space)
(submatch (1+ (in "0-9."))))))
(set-version-in-file root "lib-src/makefile.w32-in" version
(rx (and "VERSION" (0+ space) "=" (0+ space)
(submatch (1+ (in "0-9."))))))
;; nt/emacs.rc also contains the version number, but in an awkward
;; format. It must contain four components, separated by commas, and
;; in two places those commas are followed by space, in two other
;; places they are not.
(let* ((version-components (append (split-string version "\\.")
'("0" "0")))
(comma-version
(concat (car version-components) ","
(cadr version-components) ","
(cadr (cdr version-components)) ","
(cadr (cdr (cdr version-components)))))
(comma-space-version
(concat (car version-components) ", "
(cadr version-components) ", "
(cadr (cdr version-components)) ", "
(cadr (cdr (cdr version-components))))))
(set-version-in-file root "nt/emacs.rc" comma-version
(rx (and "FILEVERSION" (1+ space)
(submatch (1+ (in "0-9,"))))))
(set-version-in-file root "nt/emacs.rc" comma-version
(rx (and "PRODUCTVERSION" (1+ space)
(submatch (1+ (in "0-9,"))))))
(set-version-in-file root "nt/emacs.rc" comma-space-version
(rx (and "\"FileVersion\"" (0+ space) ?, (0+ space)
?\" (submatch (1+ (in "0-9, "))) "\\0\"")))
(set-version-in-file root "nt/emacs.rc" comma-space-version
(rx (and "\"ProductVersion\"" (0+ space) ?,
(0+ space) ?\" (submatch (1+ (in "0-9, ")))
"\\0\"")))
;; Some files in the "mac" subdirectory also contain the version
;; number.
(set-version-in-file
root "mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings"
version (rx (and "CFBundleShortVersionString" (0+ space) ?= (0+ space) ?\"
(submatch (1+ (in "0-9."))))))
(set-version-in-file
root "mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings"
version (rx (and "CFBundleGetInfoString" (0+ space) ?= (0+ space) ?\"
(submatch (1+ (in "0-9."))))))
(set-version-in-file root "mac/src/Emacs.r" (car version-components)
(rx (and "GNU Emacs " (submatch (1+ (in "0-9")))
" for Mac OS")))
(set-version-in-file root "mac/src/Emacs.r" (car version-components)
(rx (and (submatch (1+ (in "0-9"))) (0+ space) ?\,
(0+ space) "/* Major revision in BCD */")))
(set-version-in-file root "mac/src/Emacs.r" (cadr version-components)
(rx (and (submatch (1+ (in "0-9"))) (0+ space) ?\,
(0+ space) "/* Minor revision in BCD */")))
(set-version-in-file root "mac/src/Emacs.r" (cadr (cdr version-components))
(rx (and (submatch (1+ (in "0-9"))) (0+ space) ?\,
(0+ space) "/* Non-final release # */")))
(set-version-in-file root "mac/src/Emacs.r" version
(rx (and (submatch (1+ (in "0-9."))) (0+ space) ?\" ?\,
(0+ space) "/* Short version number */")))
(set-version-in-file root "mac/src/Emacs.r" version
(rx (and "/* Short version number */" (0+ space) ?\"
(submatch (1+ (in "0-9."))))))
(let* ((third-component (string-to-number (cadr (cdr version-components))))
(release (cond ((>= third-component 90) "alpha")
((>= third-component 50) "development")
(t "final"))))
(set-version-in-file
root "mac/src/Emacs.r" release
(rx (and (submatch (1+ (in "a-z"))) (0+ space) ?\, (0+ space)
"/* development, alpha, beta, or final (release) */"))))))
;;; arch-tag: 4ea83636-2293-408b-884e-ad64f22a3bf5
;; admin.el ends here.

View file

@ -1,117 +0,0 @@
/* Allocate X colors. Used for testing with dense colormaps.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, 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,102 +0,0 @@
#! /usr/bin/perl
# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
# 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., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, 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,304 +0,0 @@
: #-*- Perl -*-
eval 'exec perl -w -S $0 ${1+"$@"}' # Portability kludge
if 0;
# Author: Martin Buchholz
# This program is in the public domain.
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,531 +0,0 @@
;;; cus-test.el --- tests for custom types and load problems
;; Copyright (C) 1998, 2000, 2002, 2003, 2004, 2005, 2006, 2007
;; 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., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, 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,46 +0,0 @@
#! /bin/sh
# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
# 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., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, 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,220 +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/pretest/emacs-MM.0.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 report even the smallest change or
departure from the standard sources and procedure.
Otherwise, you are not testing the same program that we asked you to
test. Testing a different program is usually of no use whatever. It
can even cause trouble, if you fail to tell us that you tested some
other program instead of what we are about to release. We 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 we 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, we 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 in 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 we won't know what to do about a system-dependent issue, and
we may need people to say what happens if you try a certain thing on a
certain system. When this happens, we'll send out a query.
* Don't delay sending information.
When you test on a system and encounter no problems, please report it
right away. That way, we 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 us right away that Emacs seems basically to
work; then, if you notice a problem a few days later, tell us
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 report 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 save our time, simply copy the relevant parts of any previous
messages into your own bug report.
In particular, if we 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 extra work for us. There is even a risk that
we won't remember what question you are sending 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.
* For advice on debugging, see etc/DEBUG.
* 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
* 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
* Don't try changing Emacs *in any way* during pretest unless it fails
to work unchanged.
* 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 us to figure out where you propose to make the
changes. So we might ignore your patch.
* When you write a fix, keep in mind that we 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. We can't possibly
make a change like that. All we can do is 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 us to install are changes to the s- and m-
files. At least those can't break other 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 suggest changes during pretest to add features or make
something cleaner. Every change risks introducing a bug, so I won't
install a change during pretest unless 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 we have made a release that proves to be stable. That is the
easiest time to consider such suggestions. If you send them at
pretest time, we will have to defer them till later, and that might
mean we forget all about them.
* In some cases, if you don't follow these guidelines, your
information might still be useful, but we would have to do more work
to make use of it. That might cause it to fall by the wayside.
Local Variables:
mode: text
End:
# arch-tag: caf47b2c-b56b-44f7-a760-b5bfbed15fd3

View file

@ -1,90 +0,0 @@
#! /bin/bash
## Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
## Free Software Foundation, Inc.
## Author: Francesco Potorti` <pot@gnu.org>
## 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., 51 Franklin Street, Fifth Floor,
## Boston, MA 02110-1301, USA.
### Code:
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>
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.
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>
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,30 +0,0 @@
#! /bin/bash
## Author: Francesco Potorti` <pot@gnu.org>
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,190 +0,0 @@
#! /usr/bin/perl
# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
# 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., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, 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,82 +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/finder-inf.el,
lisp/version.el, man/emacs.texi, lispref/elisp.texi,
mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings,
mac/src/Emacs.r, nt/emacs.rc. 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/ the files FILE,
FILE.sig, FILE.directive.asc.
For a release, place the files in the /incoming/ftp directory.
For a pretest, place the files in /incoming/alpha instead, so that
they appear on ftp://alpha.gnu.org/.
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 <rms@gnu.org> 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,614 +0,0 @@
Copyright (C) 2007 Free Software Foundation, Inc.
See the end of the file for license conditions.
NOTES ON COPYRIGHTS AND LICENSES
Some terminology:
A "copyright notice" consists of one or a few lines of this format:
"Copyright (C) 2006, 2007 Free Software Foundation, Inc."
A "license notice" is a statement of permissions, and is usually much
longer, eg the text "GNU Emacs is free software...".
Summary for the impatient:
1. Don't add code to Emacs written by someone other than yourself
without thinking about the legal aspect. Even if the changes are
trivial, consider if they combine with previous changes by the same
author to make a non-trivial total. If so, make sure they have an
assignment. If adding a whole file adjust the copyright statements in
the file.
2. When installing code written by someone else, the ChangeLog entry
should be in the name of the author of the code, not the person who
installs it. I think it is helpful to put the author (if not yourself)
in the CVS log as well; and to not install any of your own changes in
the same commit.
3. With images, add the legal info to a README file in the directory
containing the image.
4. If you add a lot of text to a previously trivial file that had no
legal notices, consider if you should add a copyright statement.
5. Please don't just add an FSF copyright without checking that is the
right thing to do.
Every non-trivial file distributed through the Emacs CVS should be
self-explanatory in terms of copyright and license. This includes
files that are not distributed in Emacs releases (for example, the
admin/ directory), because the whole Emacs CVS is publicly
available.
The definition of triviality is a little vague, but a rule of thumb is
that any file with less than 15 lines of actual content is trivial. If
a file is auto-generated (eg ldefs-boot.el) from another one in the
CVS, then it does not really matter about adding a copyright statement
to the generated file.
Legal advice says that we could, if we wished, put a license notice
even in trivial files, because copyright law in general looks at the
overall work as a whole. It is not _necessary_ to do so, and rms
prefers that we do not. This means one needs to take care that trivial
files do not grow and become non-trivial without having a license
added. NB consequently, if you add a lot of text to a small file,
consider whether your changes have made the file worthy of a copyright
notice, and if so, please add one.
It can be helpful to put a reminder comment at the start of a trivial
file, eg: "add a license notice if this grows to > 10 lines of code".
The years in the copyright notice should be updated every year (see
file "years" in this directory). The PS versions of refcards etc
should display copyright notices (an exception to the rule about
"generated" files), but these can just display the latest year. The
full list of years should be kept in comments in the source file. If
these are distributed in CVS, check in a regenerated version when the
tex files are updated.
Copyright changes should be propagated to any associated repositories
(eg Gnus, MH-E), but I think in every case this happens automatically
(?).
All README (and other such text files) that are non-trivial should
contain copyright statements and GPL license notices, exactly as .el
files do (see e.g. README in the top-level directory). Before 2007,
we used a simple, short statement permitting copying and modification
provided legal notices were retained. In Feb 2007 we switched to the
standard GPL text, on legal advice. Some older text files in etc/
should, however, keep their current licenses (see below for list).
For image files, the copyright and license details should be recorded
in a README file in each directory with images. (Legal advice says
that we need not add notices to each image file individually, if they
allow for that.). It is recommended to use the word "convert" to
describe the automatic process of changing an image from one format to
another (http://lists.gnu.org/archive/html/emacs-devel/2007-02/msg00618.html).
When installing a file with an "unusual" license (after checking first
it is ok), put a copy of the copyright and license in the file (if
possible. It's ok if this makes the file incompatible with its
original format, if it can still be used by Emacs), or in a README
file in the relevant directory.
The vast majority of files are copyright FSF and distributed under the
GPL. A few files (mainly related to language and charset support) are
copyright AIST alone, or both AIST and FSF. (Contact Kenichi Handa
with questions about legal issues in such files.) In all these cases,
the copyright years in each file should be updated each year.
There are some exceptions to the points in the previous paragraph, and
these are listed below for reference, together with any files where
the copyright needs to be updated in "unusual" ways.
If you find any other such cases, please consult to check they are ok,
and note them in this file. This includes missing copyright notices,
and "odd" copyright holders. In most cases, individual authors should
not appear in copyright statements. Either the copyright has been
assigned (check copyright.list) to the FSF (in which case the original
author should be removed and the year(s) transferred to the FSF); or
else it is possible the file should not be in Emacs at all (please
report!).
Note that it seems painfully clear that one cannot rely on CVS logs,
or even ChangeLogs, for older changes. People often installed changes
from others, without recording the true authorship.
[For reference, most of these points were established via email with
rms, 2007/1, "Copyright years".]
lib-src/etags.c # print_version
lib-src/rcs2log # Copyright
lisp/calc/calc-help.el # calc-full-help
lisp/startup.el # fancy-splash-tail
mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings
mac/src/Emacs.r # resource 'vers'
src/emacs.c
- remember to change the latest copyright year in the --version output.
[Post-release, will automate this like set-version does for version.]
<top-level>/install-sh
lispintro/install-sh
- this file is copyright MIT, which is OK. Leave the copyright alone.
src/m/news-r6.h
public domain, leave alone.
etc/BABYL, ms-kermit
no notices (see below).
etc/edt-user.doc
- update BOTH notices in this file
etc/emacs.csh
- written by Michael DeCorte, who has no assignment. But trivial
enough to not need license.
etc/future-bug
- doesn't need a humourless disclaimer, because Karl Fogel says we
can consider it part of Emacs, and he has a blanker disclaimer for
Emacs changes. (email to rgm "[Emacs-commit] emacs/etc future-bug",
2007028)
etc/letter.pbm,letter.xpm
- trivial, no notice needed.
<http://lists.gnu.org/archive/html/emacs-devel/2007-02/msg00324.html>
etc/FTP, ORDERS
- trivial (at time of writing), no license needed
etc/GNU, INTERVIEW, LINUX-GNU, MOTIVATION, SERVICE, THE-GNU-PROJECT,
WHY-FREE
rms: "These are statements of opinion or testimony. Their licenses
should permit verbatim copying only. Please don't change the
licenses that they have. They are distributed with Emacs but they
are not part of Emacs."
etc/HELLO
standard notices. Just a note that although the file itself is not
really copyrightable, in the wider context of it being part of
Emacs (and written by those with assignments), a standard notice is
fine.
etc/MAILINGLISTS
rms: simple license is fine for this file
leim/CXTERM-DIC/4Corner.tit, ARRAY30.tit, CCDOSPY.tit, ECDICT.tit,
ETZY.tit, PY-b5.tit, Punct-b5.tit, Punct.tit, QJ-b5.tit, QJ.tit,
SW.tit, TONEPY.tit, ZOZY.tit
- leave the copyrights alone.
leim/MISC-DIC/CTLau-b5.html, CTLau.html, cangjie-table.b5, cangjie-table.cns,
pinyin.map, ziranma.cin
- leave the copyright alone.
Note that pinyin.map, ziranma.cin (and hence the generated
leim/quail/PY.el, ZIRANMA.el) are under GPLv1 or later.
leim/SKK-DIC/SKK-JISYO.L
ja-dic/ja-dic.el
(the latter is auto-generated from the former). Leave the copyright alone.
lib-src/etags.c
Copyright information is duplicated in etc/ETAGS.README. Update that
file too.
Until 2007 etags.c was described as being copyright FSF and Ken Arnold.
After some investigation in Feb 2007, then to the best of our
knowledge we believe that the original 1984 Emacs version was based
on the version in BSD4.2. See for example this 1985 post from Ken Arnold:
<http://groups.google.com/group/mod.sources/browse_thread/thread/ffe5c55845a640a9>
I have received enough requests for the current source to ctags
to post it. Here is the latest version (what will go out with
4.3, modulo any bugs fixed during the beta period). It is the
4.2 ctags with recognition of yacc and lex tags added.
See also a 1984 version of ctags (no copyright) posted to net.sources:
<http://groups.google.com/group/net.sources/msg/a21b6c21be12a98d>
Version of etags.c in emacs-16.56 duplicates comment typos.
Accordingly, in Feb 2007 we added a 1984 copyright for the
University of California and a revised BSD license. The terms of
this require that the full license details be available in binary
distributions - hence the file etc/ETAGS.README. The fact that the
--version output just says "Copyright <year> FSF" is apparently OK
from a legal point of view.
lib-src/getopt1.c, getopt_int.h
- these are from the GNU C library. Leave the copyrights alone.
lisp/play/tetris.el
- no special rules about the copyright. We note here that we believe
(2007/1) there is no problem with our use of the name "tetris" or
the concept.
rms: "My understanding is that game rules as such are not copyrightable."
<http://lists.gnu.org/archive/html/emacs-devel/2007-01/msg00960.html>
lispref/doclicense.texi
man/doclicense.texi
- leave the copyright alone in this imported file.
lisp/net/tramp.el
- there are also copyrights in the body of the file. Update these too.
lwlib/
rms (2007/02/17): "lwlib is not assigned to the FSF; we don't consider
it part of Emacs. [...] Therefore non-FSF copyrights are ok in lwlib."
NB don't change the GPL version used for lwlib .c and .h files (see
below).
FSF copyrights should only appear in files which have undergone
non-trivial cumulative changes from the original versions in the Lucid
Widget Library. NB this means that if you make non-trivial changes to
a file with no FSF copyright, you should add one. Also, if changes are
reverted to the extent that a file becomes basically the same as the
original version, the FSF copyright should be removed.
In my (rgm) opinion, as of Feb 2007, all the non-trivial files differ
significantly from the original versions, with the exception of
lwlib-Xm.h. Most of the changes that were made to this file have
subsequently been reverted. Therefore I removed the FSF copyright from
this file (which is arguably too trivial to merit a notice anyway). I
added FSF copyright to the following files which did not have them
already: Makefile.in, lwlib-Xaw.c, lwlib-int.h (borderline),
lwlib-utils.c (borderline), lwlib.c, lwlib.h.
Copyright years before the advent of public CVS in 2001 were those
when I judged (from the CVS logs) that non-trivial amounts of change
had taken place. I also adjusted the existing FSF years in xlwmenu.c,
xlwmenu.h, and xlwmenuP.h on the same basis.
Note that until Feb 2007, the following files in lwlib were lacking
notices: lwlib-int.h, lwlib.h, lwlib-Xaw.h, lwlib-Xlw.h, lwlib-utils.h
The following files did not list a Lucid copyright: xlwmenu.h,
xlwmenuP.h.
To the best of our knowledge, all the code files in lwlib were
originally part of the Lucid Widget Library, even if they did not say
so explicitly. For example, they were all present in Lucid Emacs 19.1
in 1992. The exceptions are the two Xaw files, which did not appear
till Lucid Emacs 19.9 in 1994. The file lwlib-Xaw.h is too trivial to
merit a copyright notice, but would presumably have the same one as
lwlib-Xaw.c. We have been unable to find a true standalone version of
LWL, if there was such a thing, to check definitively.
To clarify the situation, in Feb 2007 we added Lucid copyrights and
GPL notices to those files lacking either that were non-trivial,
namely: lwlib-int.h, lwlib.h, xlwmenu.h, xlwmenuP.h. This represents
our best understanding of the legal status of these files. We also
clarified the notices in Makefile.in, which was originally the
Makefile auto-generated from Lucid's Imakefile.
As of Feb 2007, the following files are considered too trivial for
notices: lwlib-Xaw.h, lwlib-Xlw.h, lwlib-utils.h.
The version of lwlib/ first installed in Emacs seems to be the same as
that used in Lucid Emacs 19.8 (released 6-sep-93); except the two Xaw
files, which did not appear till Athena support was added in Lucid
Emacs 19.9. In Lucid Emacs 19.1, all files were under GPLv1 or later,
but by Lucid Emacs 19.8, lwlib.c and xlwmenu.c had been switched to v2
or later. These are the versions that were first installed in Emacs.
So in GNU Emacs, these two files have been under v2 or later since
1994.
It seems that it was the intention of Lucid to use v1 or later
(excepting the two files mentioned previously); so this is the license
we have used when adding notices to code that did not have notices
originally. Although we have the legal right to switch to v2 or later,
rms prefers that we do not do so.
man/*.texi - All manuals should be under GFDL, and should include a
copy of it, so that they can be distributed separately. faq.texi has
a different license, for some reason no-one can remember.
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00583.html
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00618.html
msdos/is_exec.c, sigaction.c - these files are copyright DJ Delorie.
Leave the copyrights alone. Leave the Eli Zaretskii copyright in
is_exec.c alone. See the msdos/README file for the legal history of
these files.
oldXMenu/
Keep the "copyright.h" method used by X11, rather than moving the
licenses into the files. Note that the original X10.h did not use
copyright.h, but had an explicit notice, which we retain.
If you make non-trivial changes to a file which does not have an FSF
notice, add one and a GPL notice (as per Activate.c). If changes to a
file are reverted such that it becomes essentially the same as the
original X11 version, remove the FSF notice and GPL.
Only the files which differ significantly from the original X11
versions should have FSF copyright and GPL notices. At time of writing
(Feb 2007), this is: Activate.c, Create.c, Internal.c. I (rgm)
established this by diff'ing the current files against those in X11R1,
and when I found significant differences looking in the ChangeLog for
the years they originated (the CVS logs are truncated before 1999). I
therefore removed the FSF notices (added in 200x) from the other
files. There are some borderline cases IMO: AddSel.c, InsSel.c,
XMakeAssoc.c, XMenu.h. For these I erred on the side of NOT adding FSF
notices.
With regards to whether the files we have changed should have GPL
added or not, rms says (2007-02-25, "oldXmenu issues"):
It does not make much difference, because oldXmenu is obsolete
except for use in Emacs (and it is not normally used in Emacs any
more either).
So, to make things simple, please put our changes under the GPL.
insque.c had no copyright notice until 2005. The version of insque.c
added to Emacs 1992-01-27 is essentially the same as insremque.c added
to glic three days later by Roland McGrath, with an FSF copyright and
GPL, but no ChangeLog entry:
<http://sources.redhat.com/cgi-bin/cvsweb.cgi/~checkout~/libc/misc/insremque.c?\
rev=1.1&cvsroot=glibc>
To the best of his recollection, McGrath (who has a copyright
assignment) was the author of this file (email from roland at frob.com
to rms, 2007-02-23, "Where did insque.c come from?"). The FSF
copyright and GPL in this file are therefore correct as far as we
understand it.
Imakefile had no legal info in Feb 2007, but was obviously based on
the X11 version (which also had no explicit legal info). As it was
unused, I removed it. It would have the same MIT copyright as
Makefile.in does now.
src/gmalloc.c
- contains numerous copyrights from the GNU C library. Leave them alone.
src/acldef.h, chpdef.h, ndir.h
- see comments below. These files are OK to be released with Emacs
22, but we may want to revisit them afterwards.
** Some notes on resolved issues, for historical information only
etc/TERMS
rms: "surely written either by me or by ESR. (If you can figure out
which year, I can probably tell you which.) Either way, we have papers
for it." It was present in Emacs-16.56 (15-jul-85). rms: "Then I
conclude it was written by me."
etc/ulimit.hack
Very obsolete file removed March 2007. Doesn't say who the author
is, but web-search suggests Karl Kleinpaste, who has no Emacs
assignment. Trivial anyway.
http://groups.google.com/group/comp.unix.shell/browse_thread/thread/bf3df496994\
9f1df/7e5922c67b3a98fb
http://groups.google.com/group/comp.unix.questions/msg/cc7e49cacfd1ccb4
(original 1987 source)
lisp/term/README
- had no copyright notice till Feb 2007. ChangeLog.3 suggests it was
written by Eric Raymond. When asked by rms on 14 Feb 2007 he said:
I don't remember writing it, but it reads like my prose and I believe
I wrote the feature(s) it's describing. So I would have been the
likeliest person to write it.
Odds are that I did, but I'm not certain.
Accordingly, FSF copyright was added.
src/unexhp9k800.c (and dependent src/m/sr2k.h)
- briefly removed due to legal uncertainly Jan-Mar 2007. The
relevant assignment is under "hp9k800" in copyright.list. File was
written by John V. Morris at HP, and disclaimed by the author and
HP. So this file is public domain.
K Rodgers changes
It was pointed out that K Rodgers only had assigments for VC and
ps-print, but had changed several other files. We tried to contact
him for a general assignment, but he proved uncommunicative (despite
initially indicating to rms he would sign an assignment). As a result, his
changes were removed and/or rewritten independently. For details, see
threads:
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00225.html
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00257.html
** Issues that are "fixed" for the release of Emacs 22, but we may
wish to revisit later in more detail
admin/check-doc-strings
File says it's in the public domain, but that might not make it so.
etc/BABYL
File written long ago by authors with no assignment. Keep them
without notices for now, try and contact authors if possible. Be
ready to remove these files if the authors ever object.
etc/ms-kermit
etc/e/eterm-color.ti
src/acldef.h, chpdef.h, ndir.h
On legal advice from Matt Norwood, the following comment was added
to these files in Feb/Mar 2007:
The code here is forced by the interface, and is not subject to
copyright, constituting the only possible expression of the
algorithm in this format.
With the addition of this notice, these files are OK for the
upcoming Emacs-22 release. Post-release, we can revisit this issue
and possibly add a list of all authors who have changed these files.
(details in email from Matt Norwood to rms, 2007/02/03).
etc/ms-7bkermit
Says it was written by Andy Lowry and Joel Spolsky. No entry for
either in copyright.list. NB this file is not "constrained" like
ms-kermit (rms: "We know it isn't. A comment at the front says it has
other bindings which might be handy."). File removed March 2007.
Re-add if clear up status at some point.
etc/Xkeymap.txt
No info on author. File removed March 2007. rms: "It says it is
RLK's way of remapping his keyboard, so it is not constrained. I think
it was written by RLK. Let's delete it; if we contact RLK again, we
can put it back." Actually, RLK == Robert Krawitz has an Emacs
assignment. So this could be restored if it is still useful, but Jan Djärv
says it is obsolete:
<http://lists.gnu.org/archive/html/emacs-devel/2007-03/msg00673.html>
src/m/mips4.h, news-risc.h, pmax.h
src/s/aix3-2.h, bsd386.h, hpux8.h, hpux9.h, irix4-0.h, irix5-0.h,
isc2-2.h, netbsd.h, osf1.h, sol2-3.h, sunos4-0.h, usg5-4-2.h
- all these (not obviously trivial) files were missing copyrights
till Feb 2007, when FSF copyright was added. Matt Norwood advised:
For now, I think the best policy is to assume that we do have
assignments from the authors (I recall many of these header files
as having been originally written by rms), and to attach an FSF
copyright with GPL notice. We can amend this if and when we
complete the code audit. Any additions to these files by
non-assigned authors are arguably "de minimis" contributions to
Emacs: small changes or suggestions to a work that are subsumed in
the main authors' copyright in the entire work.
Here is my (rgm) take on the details of the above files:
mips4.h
might be trivial? started trivial, been added to in tiny changes by
those with FSF assignment, often result of email suggestions by others.
news-risc.h
started trivial. Grown by tiny additions, plus chunk
from mips.h, which was and is Copyright FSF
pmax.h
started trivial. grown in tiny changes, except for maybe Jim Wilson's
comment.
? irix4-0.h
I would say started non-trivial (1992, rms). only tiny changes since
installed.
? irix5-0.h
I would say started non-trivial (1993, jimb, heavily based
on irix4-0.h). A few borderline non-tiny changes since.
? isc2-2.h
started trivial. 2 non-tiny change, in 1993. looks to
be made up of several small tweaks from various sources. maybe
non-tiny total changes from Karl Berry (no emacs assignment).
osf1.h
started trivial. grown in tiny changes (one borderline tiny change
by fx in 2000, but most code was later removed). non-tiny addition
in 2002 from m/alpha.h, but that was and is copyright FSF.
usg5-4-2.h
started non-trivial, but was heavily based on usg5-4.h, which was and is
copyright FSF. only tiny changes since installed.
sol2-3.h
started trivial. only non-tiny change (1994) incorporated code from
usg5-4.h, which was and is copyright FSF.
aix3-2.h, bsd386.h, hpux8.h, hpux9.h, netbsd.h, sunos4-0.h
started trivial, grown in tiny changes.
netbsd.h:
Roland McGrath said to rms (2007/02/17): "I don't really remember
anything about it. If I put it in without other comment, then probably
I wrote it myself."
Someone might want to tweak the copyright years (for dates before
2001) that I used in all these files.
Note: erring on the side of caution, I also added notices to some
files I thought might be considered non-trivial (if one includes
comment) in s/:
aix4-1.h hiuxmpp.h hiuxwe2.h hpux10.h irix6-0.h irix6-5.h isc3-0.h
ptx4.h sol2.h sunos4-0.h
(everything with > 30 non-blank lines, which at least is _some_ kind of
system)
*** These are copyright issues that need not be fixed until after
Emacs 22 is released (though if they can be fixed before, that is
obviously good):
Maybe some relevant comments here?
<http://groups.google.com/group/linux.debian.legal/browse_thread/thread/123547ea95437a1f>
Is it OK to just `cvs remove' a file for legal reasons, or is
something more drastic needed? A removed file is still available from
CVS, if suitable options are applied. (This CVS issue obviously does
not affect a release).
rms: will ask lawyer
Make sure that all files with non-standard copyrights or licenses are
noted in this file.
REMOVED etc/gnu.xpm, nt/icons/emacs21.ico, nt/icons/sink.ico
- Restore if find legal info. emacs21.ico is not due to Davenport.
Geoff Voelker checked but could not find a record of where it came
from.
etc/images
Image files from GTK, Gnome are under GPLv2 (no "or later"?). RMS will
contact image authors in regards to future switch to v3.
etc/TUTORIAL* (translations)
switch to GPL (see english TUTORIAL)
rms: "We can leave the TUTORIAL translations alone until their
maintainers update them."
Can adapt short license text from end of GPL translations at:
http://www.gnu.org/licenses/translations.html
Only a few sentences around the license notice need changing from
previous version.
Done: TUTORIAL.eo
REMOVED src/unexhp9k800.c
- we would like to re-add this file if possible. Please let us know
if you can clarify its legal status.
http://lists.gnu.org/archive/html/emacs-devel/2007-02/msg00138.html
*** These are copyright issues still to be addressed:
Need an assignment from Kevin Rodgers (rms), else several changes to
deal with.
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.

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

@ -0,0 +1 @@
titi

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,72 +0,0 @@
How to Maintain Copyright Years for GNU Emacs
(see also file "copyright" in this directory)
"Our lawyer says it is ok if we add, to each file that has been in Emacs
since Emacs 21 came out in 2001, all the subsequent years[1]. We don't
need to check whether *that file* was changed in those years.
It's sufficient that *Emacs* was changed in those years (and it was!).
For those files that have been added since then, we should add
the year it was added to Emacs, and all subsequent years."
--RMS, 2005-07-13
[1] Note that this includes 2001 - see
<http://lists.gnu.org/archive/html/emacs-pretest-bug/2006-12/msg00119.html>
For the refcards under etc/, it's ok to simply use the latest year
(typically in a `\def\year{YEAR}' expression) for the rendered copyright
notice, while maintaining the full list of years in the copyright notice
in the comments.
------------------------------------------------------------------------------
Following is the policy that we tried to write down one time (mid 2005).
Although it is incorrect, we keep it around to remind us how complicated
things used to be (and may become in the future).
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/emacs/windows/
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,221 +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 for non-x86 platforms
Distributions for non-x86 platforms are no longer supplied. Older
platforms supported by Windows NT no longer seem to be in demand,
and Emacs is yet to be ported to 64bit Windows platforms. If you are
willing to help port Emacs to 64bit versions of Windows, your
contribution will be welcome on the emacs-devel mailing list.
* Unpacking distributions
Ports of GNU gzip and GNU tar for handling the distribution file
formats can be found in several places that distribute ports of GNU
programs, for example:
Cygwin: http://www.cygwin.com/
GnuWin32: http://gnuwin32.sourceforge.net/
Many other popular file compression utilities for Windows are also
able to handle gzipped tar files.
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).
Once you have unpacked a precompiled distribution of Emacs, it should
have the following subdirectories:
bin etc info lisp site-lisp
* 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 WinZip would enable this translation
by default. If you are using WinZip, disable it. (I don't have
WinZip 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 also had reports that some older "gnuwin32" port of tar
corrupts the executables. Use the latest version from the gnuwin32
site or another port of tar 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++ 2003 or earlier, 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://lists.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!
Jason Rumney
(jasonr@gnu.org)
Most of this README was contributed by former maintainer Andrew Innes
(andrewi@gnu.org)

View file

@ -1,187 +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/emacs/windows/
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:
http://www.gnu.org/software/emacs/windows/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://lists.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://lists.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,161 +0,0 @@
@echo off
rem Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
rem Free Software Foundation, Inc.
rem
rem Cannot use brackets in andrewi's email below because
rem older Windows shells will treat that as redirection.
rem
rem Author: Andrew Innes andrewi@gnu.org
rem
rem This file is part of GNU Emacs.
rem
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
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
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., 51 Franklin Street, Fifth Floor,
rem Boston, MA 02110-1301, USA.
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,366 +0,0 @@
#!/bin/sh
### quick-install-emacs --- do a halfway-decent job of installing emacs quickly
## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
## Free Software Foundation, Inc.
## Author: Miles Bader <miles@gnu.org>
## 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., 51 Franklin Street, Fifth Floor,
## Boston, MA 02110-1301, USA.
### Commentary:
## 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.*$/\3/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,138 +0,0 @@
#! /usr/bin/perl
# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
# 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., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, 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, 2002, 2003
rem 2004, 2005, 2006, 2007 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., 51 Franklin Street, Fifth Floor,
rem Boston, MA 02110-1301, 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

1513
config.guess vendored

File diff suppressed because it is too large Load diff

1622
config.sub vendored

File diff suppressed because it is too large Load diff

24455
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

6
etc/.gitignore vendored
View file

@ -1,6 +0,0 @@
fns-*
icons
*.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,87 +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
Mix 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,339 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General
Public License instead of this License.

File diff suppressed because it is too large Load diff

770
etc/DEBUG
View file

@ -1,770 +0,0 @@
Debugging GNU Emacs
Copyright (C) 1985, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007 Free Software Foundation, Inc.
See the end of the file for license conditions.
[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.
(These commands are described below under "Examining Lisp object
values" and "Debugging Emacs Redisplay problems".)
** 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.
To see the current value of a Lisp Variable, use `pv variable'.
Note: It is not a good idea to try `pr', `pp', or `pv' 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 use the
`xpr' command to print out the data type and value of the last data
value, For example:
p it->object
xpr
You may also analyze data values using 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) xpr
Lisp_Vectorlike
PVEC_FRAME
$2 = (struct frame *) 0x8560258
"emacs@localhost"
(gdb) p *$
$3 = {
size = 1073742931,
next = 0x85dfe58,
name = 140615219,
[...]
}
Now we can use `pr' to print the frame parameters:
(gdb) pp $->param_alist
((background-mode . light) (display-type . color) [...])
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, so GDB only knows about it if Emacs has been compiled with
preprocessor macro information. GCC provides this if you specify the options
`-gdwarf-2' and `-g3'. In this case, GDB can evaluate expressions like
"p XVECTOR (this_command_keys)".
When this information isn't available, 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 Emacs Redisplay problems
The src/.gdbinit file defines many useful commands for dumping redisplay
related data structures in a terse and user-friendly format:
`ppt' prints value of PT, narrowing, and gap in current buffer.
`pit' dumps the current display iterator `it'.
`pwin' dumps the current window 'win'.
`prow' dumps the current glyph_row `row'.
`pg' dumps the current glyph `glyph'.
`pgi' dumps the next glyph.
`pgrow' dumps all glyphs in current glyph_row `row'.
`pcursor' dumps current output_cursor.
The above commands also exist in a version with an `x' suffix which
takes an object of the relevant type as argument.
** Following longjmp call.
Recent versions of glibc (2.4+?) encrypt stored values for setjmp/longjmp which
prevents GDB from being able to follow a longjmp call using `next'. To
disable this protection you need to set the environment variable
LD_POINTER_GUARD to 0.
** Using GDB in Emacs
Debugging with GDB in Emacs offers some advantages over the command line (See
the GDB Graphical Interface node of the Emacs manual). There are also some
features available just for debugging Emacs:
1) The command gud-pp is available on the tool bar (the `pp' icon) and
allows the user to print the s-expression of the variable at point,
in the GUD buffer.
2) Pressing `p' on a component of a watch expression that is a lisp object
in the speedbar prints its s-expression in the GUD buffer.
3) The STOP button on the tool bar is adjusted so that it sends SIGTSTP
instead of the usual SIGINT.
4) The command gud-pv has the global binding 'C-x C-a C-v' and prints the
value of the lisp variable at point.
** 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
The X server normally reports protocol errors asynchronously,
so you find out about them long after the primitive which caused
the error has returned.
To get clear information about the cause of an error, 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, which is maintained
as a circular buffer. 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. In general, you need to correlate the
values recorded in the `last_marked' array with the corresponding
stack frames in the backtrace, beginning with the innermost frame.
Some subroutines of `mark_object' are invoked recursively, others loop
over portions of the data structure and mark them as they go. By
looking at the code of those routines and comparing the frames in the
backtrace with the values in `last_marked', you will be able to find
connections between the values in `last_marked'. E.g., when GC finds
a cons cell, it recursively marks its car and its cdr. Similar things
happen with properties of symbols, elements of vectors, etc. Use
these connections to reconstruct the data structure that was being
marked, paying special attention to the strings and names of symbols
that you encounter: these strings and symbol names can be used to grep
the sources to find out what high-level symbols and global variables
are involved in the crash.
Once you discover the corrupted Lisp object or data structure, grep
the sources for its uses and try to figure out what could cause the
corruption. If looking at the sources doesn't help, you could try
setting a watchpoint on the corrupted data, and see what code modifies
it in some invalid way. (Obviously, this technique is only useful for
data that is modified only very rarely.)
It is also useful to look at the corrupted object or data structure 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).
** How to recover buffer contents from an Emacs core dump file
The file etc/emacs-buffer.gdb defines a set of GDB commands for
recovering the contents of Emacs buffers from a core dump file. You
might also find those commands useful for displaying the list of
buffers in human-readable format from within the debugger.
** 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 necessarily 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.
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
Local variables:
mode: outline
paragraph-separate: "[ ]*$"
end:
;;; arch-tag: fbf32980-e35d-481f-8e4c-a2eca2586e6b

View file

@ -1,186 +0,0 @@
---------------- -*- mode: text; coding: utf-8; fill-column: 70 -*- --
-- --
-- Humor (sometimes unintended) on the Emacs developer's list --
-- --
-- The Free Software Foundation claims no copyright on this file, --
-- compiled from the public emacs-devel mailing list. --
-- --
----------------------------------------------------------------------
"Is it legal for a `struct interval' to have a total_length field of
zero?"
"We can't be arrested for it as far as I know, but it is definitely
invalid for an interval to have zero length."
-- Miles Bader and RMS
----------------------------------------------------------------------
Re: lost argument and doc string
I remember when I lost an argument. Boy did that hurt! ;-).
-- RMS
----------------------------------------------------------------------
"'Cowardly' is not an adverb, although it looks like one. It is an
adjective. It makes a statement about general temperament, rather
than a specific occasion. I don't think Emacs has a general
temperament."
"Mine does."
-- RMS and Eli Zaretskii
----------------------------------------------------------------------
"In order to bring the user's attention to the minibuffer when an
item such as 'Edit -> Search' is activated from the menu, I was just
thinking that we could draw a big rectangle around the minibuffer,
blinking (or zooming in-and-out) until some input is typed in."
"How about dancing elephants?"
"They don't fit in my office."
"Well once the elephants are done, your office will be much...
bigger."
-- Stefan Monnier, Miles Bader and Kai Grossjohann
----------------------------------------------------------------------
I remember these versions as yard-rocks (is that between inch-pebbles
and mile-stones?).
-- Kai Grossjohann
----------------------------------------------------------------------
"I think it depends on video drivers. I cannot reproduce it on my
home PC, but I can at work."
"Can you try to find a workaround at work? (I guess you don't need
a homearound at home. ;-)"
-- Jason Rumney and RMS
----------------------------------------------------------------------
By the way, I also really really hate this unibyte/multibyte problem.
Sometimes I think I should have opposed to the introduction of such a
concept more strongly.
imagine there's no unibyte
it's easy if you try
no bytes below us
above us only chars
imagine all the people living in multibyte
-- Kenichi Handa
----------------------------------------------------------------------
I try to uphold the ideals that I was taught to value as an American,
but every year I get less and less help from the United States.
-- RMS
----------------------------------------------------------------------
"If the terminfo entry is most likely wrong, and we know it, then it
doesn't make sense to follow it."
"Nevertheless, until now, we always did."
"So.... should we not fix old bugs?"
"Why fix an old bug if you can write three new ones in the same
time?"
-- Miles Bader, Eli Zaretskii and David Kastrup
----------------------------------------------------------------------
[...] As is well known, people who speak American English tend to
be more resource-conscious and try to avoid wasting precious bits
transferring those redundant "u"s.
Think of the number of occurrences of "color" and "behavior" in the
Emacs tarball, multiply that by the number of times it'll be
downloaded, stored on hard disks, archived, ...that's a substantial
saving.
-- Stefan Monnier
----------------------------------------------------------------------
Re: Parent of a derived mode's keymap.
"I can't decide whether the title of this thread is more fitting for
a blues song or a pulp fiction booklet. It certainly projects drama."
"Hey, it says derived, not deprived."
"Actually, for some keymaps 'depraved' would fit better."
"I knew it! You're one of them vi lovers! There is nothing wrong
with Emacs using escape, meta, alt, control, and shift!"
-- David Kastrup and Lute Kamstra
----------------------------------------------------------------------
"Aren't user-defined constants useful in other languages?"
"The only user-defined constant is ignorance. (With programmers,
this is a variable concept ;-)"
-- Juanma Barranquero and Thien-Thi Nguyen
----------------------------------------------------------------------
"Uh, 'archaic' and 'alive' is not a contradiction."
"Yes it is. 'Archaic' does not mean 'old' or 'early'. It means
'obsolete'."
"'He arche' in Greek means 'the beginning'. John 1 starts off with
'En arche en ho Logos': in the beginning, there was the word. Now of
course we all know that Emacs was there before Word, but this might
have escaped John's notice."
-- David Kastrup and RMS
----------------------------------------------------------------------
Re: patch for woman (woman-topic-at-point)
"Sorry for the long message. I wanted to make the problem clear
also for people not familiar with `woman'."
"Most hackers, I take?
For a moment there I thought you had a patch that you could put on
a woman, and it would make her come right to the topic at point
without attempting any course of action that requires an advance
course in divination.
There'd be quite a sensational market for that, you know."
-- Emilio Lopes and David Kastrup
----------------------------------------------------------------------
"[T]here may be a good reason since the code explicitly checks for
this; see keyboard.c:789 [...]"
"I think I understand, but I can't find the code in keyboard.c. Do
you really mean 'line 789'? Of which revision?"
"Sorry; by 789, I mean 3262 :-P"
-- Chong Yidong and Stefan Monnier
----------------------------------------------------------------------
"[...] In my opinion, your change does not either increase or
decrease readability. It's a tossup."
"Uh, setting tem to '', an artificial empty string, in order to have
j incremented once again before breaking out of the finished loop is
readable?
Is this kind of 'readable' synonymous to 'comprehensible with
serious effort', reminiscent of mathematicians' use of 'trivial' as
synonymous with 'provable with serious effort'?"
-- RMS and David Kastrup
----------------------------------------------------------------------
Re: New Emacs Icon and Tango
"What about using the 'happy face' with gnu horns?"
"It would make Emacs the object of ridicule until the end of time."
"Isn't it already?"
"It's the object of ridicule until the end of _tape_. The jury is
still out about that end of time thing."
-- Kim F. Storm, Miles Bader, RMS and David Kastrup
----------------------------------------------------------------------
"Despite being a maths graduate, I can't think of any other such
constants with anything like the universality of e and pi."
"42"
-- Alan Mackenzie and David Hansen
----------------------------------------------------------------------
"[...] So please do not delete anything."
"Done."
-- RMS and David Kastrup

View file

@ -1,115 +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, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
See the end of the file for license conditions.
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
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.

File diff suppressed because it is too large Load diff

View file

@ -1,114 +0,0 @@
-*- indented-text -*-
See the end of this file for copyright information.
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 =====================
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
COPYING PERMISSIONS:
This document 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

View file

@ -1,49 +0,0 @@
etags is distributed under the following conditions:
Copyright (C) 1984 The Regents of the University of California
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the
distribution.
3. Neither the name of the University nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Copyright (C) 1984, 1987, 1988, 1989, 1993, 1994, 1995, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is not considered part of GNU Emacs.
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

View file

@ -1,6 +0,0 @@
For information about how to obtain GNU Emacs and other GNU software
by FTP, please see <http://www.gnu.org/order/ftp.html>.
Information about Emacs is also available at
<http://www.gnu.org/software/emacs/>.

545
etc/GNU
View file

@ -1,545 +0,0 @@
Copyright (C) 1985, 1993, 2001, 2002, 2003, 2004,
2005, 2006, 2007 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 www.gnu.org. For software tasks to work on, see
http://savannah.gnu.org/projects/tasklist. For other ways
to contribute, see http://www.gnu.org/help.
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 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) Subsequently we have learned to distinguish 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,544 +0,0 @@
GNUS NEWS -- history of user-visible changes.
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007 Free Software Foundation, Inc.
See the end of the file for license conditions.
Please send Gnus bug reports to bugs@gnus.org.
For older news, see Gnus info node "New Features".
* Installation changes
** 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 save in general.
** Lisp files are now installed in `.../site-lisp/gnus/' by default. It
defaulted to `.../site-lisp/' formerly. In addition to this, the new
installer issues a warning if other Gnus installations which will shadow
the latest one are detected. You can then remove those shadows manually
or remove them using `make remove-installed-shadows'.
** 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' and `xemacs.mak' superfluous, so
they have been removed.
** `~/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.
** `(require 'gnus-load)'
If you use a stand-alone Gnus distribution, you'd better add `(require
'gnus-load)' into 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.
* New packages and libraries within Gnus
** The revised Gnus FAQ is included in the manual, *Note Frequently Asked
Questions::.
** 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.
** 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. *Note Thwarting Email Spam::.
** 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. *Note Sieve Commands::, and the new Sieve manual *Note Top:
(sieve)Top.
* Changes in group mode
** `gnus-group-read-ephemeral-group' can be called interactively, using `G
M'.
** Retrieval of charters and control messages
There are new commands for fetching newsgroup charters (`H c') and
control messages (`H C').
** 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 `~/.gnus.el' 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"))))
** 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
`nnimap-fixup-unread-after-getting-new-news' again. If you were happy
with the estimate and want to save some (minimal) time when getting new
mail, remove the function.
** 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.
** `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)
* Changes in summary and article mode
** `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.
** In draft groups, `e' is now bound to `gnus-draft-edit-message'. Use `B
w' for `gnus-summary-edit-article' instead.
** Article Buttons
More buttons for URLs, mail addresses, Message-IDs, Info links, man
pages and Emacs or Gnus related references. *Note Article Buttons::.
The variables `gnus-button-*-level' can be used to control the
appearance of all article buttons. *Note Article Button Levels::.
** Single-part yenc encoded attachments can be decoded.
** Picons
The picons code has been reimplemented to work in GNU Emacs--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. *Note
Picons::.
** If the new option `gnus-treat-body-boundary' is non-`nil', a boundary
line is drawn at the end of the headers.
** 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. Use `(setq gnus-summary-display-arrow nil)' 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).
** Gnus supports RFC 2369 mailing list headers, and adds a number of
related commands in mailing list groups. *Note Mailing List::.
** The Date header can be displayed in a format that can be read aloud in
English. *Note Article Date::.
** diffs are automatically highlighted in groups matching
`mm-uu-diff-groups-regexp'
** 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.
The new command `W Y f' (`gnus-article-outlook-deuglify-article') allows
deuglifying broken Outlook (Express) articles.
** `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.
** Smileys (`:-)', `;-)' etc) are now displayed graphically in Emacs too.
Put `(setq gnus-treat-display-smileys nil)' in `~/.gnus.el' to disable
it.
** Face headers handling. *Note Face::.
** 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'.
** `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.
** Deleting of attachments.
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 is determined from the `current-language-environment'
variable, instead of `iso-8859-1'. Also the `.*' item in
`gnus-group-charset-alist' is removed.
** 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.
** 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.
** Gnus inlines external parts (message/external).
* Changes in Message mode and related Gnus features
** 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. *Note Delayed Articles::.
** If the new option `nnml-use-compressed-files' is non-`nil', the nnml
back end allows compressed message files.
** The new option `gnus-gcc-mark-as-read' automatically marks Gcc articles
as read.
** Externalizing of attachments
If `gnus-gcc-externalize-attachments' or
`message-fcc-externalize-attachments' is non-`nil', attach local files
as external parts.
** The envelope sender address can be customized when using Sendmail.
*Note Mail Variables: (message)Mail Variables.
** Gnus no longer generate 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-From headers are no longer generated when you
start composing messages and `message-generate-headers-first' is `nil'.
** Easy inclusion of X-Faces headers. *Note X-Face::.
** 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.
** `message-insinuate-rmail'
Adding `(message-insinuate-rmail)' and `(setq mail-user-agent
'gnus-user-agent)' in `.emacs' 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 [(tab)]
'bbdb-complete-name)
** `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 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.
** The option `mm-fill-flowed' can be used to disable treatment of
"format=flowed" messages. Also, flowed text is disabled when sending
inline PGP signed messages. (New in Gnus 5.10.7)
** Gnus supports the generation of RFC 2298 Disposition Notification
requests.
This is invoked with the `C-c M-n' key binding from message mode.
** 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 an article or not (for canceling and
superseding). Gnus generates a random password string the first time
you post a message, and saves it in your `~/.emacs' 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
behavior can be changed by customizing `message-insert-canlock'.
** 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'.
** 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 the symbol `best'.
The behavior for the `best' value is to show MML (i.e., convert to MIME)
when appropriate. MML will not be used when forwarding signed or
encrypted messages, as the conversion invalidate the digital signature.
** If `auto-compression-mode' is enabled, attachments are automatically
decompressed when activated.
** 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.
** You can now drag and drop attachments to the Message buffer. See
`mml-dnd-protocol-alist' and `mml-dnd-attach-options'. *Note MIME:
(message)MIME.
* Changes in back ends
** Gnus can display RSS newsfeeds as a newsgroup. *Note RSS::.
** The nndoc back end now supports mailman digests and exim bounces.
** Gnus supports Maildir groups.
Gnus includes a new back end `nnmaildir.el'. *Note Maildir::.
** The nnml and nnfolder back ends store marks for each groups.
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.
* Appearance
** 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 (*note Security: (message)Security.).
** The tool bars have been updated to use GNOME icons in Group, Summary and
Message mode. You can also customize the tool bars. This is a new
feature in Gnus 5.10.9. (Only for Emacs, not in XEmacs.)
** The tool bar icons are now (de)activated correctly in the group buffer,
see the variable `gnus-group-update-tool-bar'. Its default value
depends on your Emacs version. This is a new feature in Gnus 5.10.9.
* Miscellaneous changes
** `gnus-agent'
The Gnus Agent has seen a major updated and 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 back ends 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 behavior of having the Agent disabled
with `(setq gnus-agent nil)'. Note that putting `(gnus-agentize)' in
`~/.gnus.el' is not needed any more.
** 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. `(setq gnus-agent-cache
nil)' reverts to the old behavior.
** Dired integration
`gnus-dired-minor-mode' (see *Note Other modes::) installs key bindings
in dired buffers to send a file as an attachment, open a file using the
appropriate mailcap entry, and print a file using the mailcap entry.
** The format spec `%C' for positioning point has changed to `%*'.
** `gnus-slave-unplugged'
A new command which starts Gnus offline in slave mode.
* For older news, see Gnus info node "New Features".
----------------------------------------------------------------------
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
Local variables:
mode: outline
paragraph-separate: "[ ]*$"
end:

View file

@ -1,88 +0,0 @@
This is a list of ways to say hello in various languages.
Non-ASCII examples:
Europe: ,A!(BHola!, Gr,A|_(B Gott, Hyv,Add(B p,Ad(Biv,Add(B, Tere ,Au(Bhtust, Bon,Cu(Bu
Cze,B6f(B!, Dobr,B}(B den, ,L7T`PRabRcYbU(B!, ,FCei\(B ,Fsar(B, $,1J2J0J;J0J@JOJ=J1J0(B
Africa: $(3!A!,!>(B
Middle/Near East: ,Hylem(B, (38R(47d(3T!JSa(4W(3W(B
South Asia: 4$,4!8v#")0$,15h14$,4!hv#")0$,15n14$,4!zv#!)v#")v#"D0$,15x6-5d6'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, 4$,46<0$,1@H14$,46A0$,1@N14$,46Kv#6Vv#6)v#6M0$,1@X@m@5@^14$,46Cv#6W0$,1@P@"1(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, 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
South East Asia: (1JP:R-04U1(B, ,TJ0GQ1J04U1$0CQ1:(B, Ch,1`(Bo b,1U(Bn
East Asia: $ADc:C(B, $(0*/=((B, $B$3$s$K$A$O(B, $(C>H3gGO<<?d(B
Misc: E,C6(Bo,C~(Ban,Cx(Bo ,Cf(Biu,C<(Ba,C}(Bde, $,2(3(1('('(5(B, $,1x (B p $,1x((B world $,1s"(B hello p $,2!a(B
CJK variety: GB($AT*Fx(B,$A?*7"(B), BIG5($(0&x86(B,$(0DeBv(B), JIS($B855$(B,$B3+H/(B), KSC($(Cj*Q((B,$(CKR[!(B)
Unicode charset: E$,1 E(Bo$,1 }(Ban$,1 =(Bo $,1 )(Biu$,1 U(Ba$,1!-(Bde, $,1&s'5'9',(B $,1'C'1'B(B, $,1-),|,u,}(B, $,1(7(T(`(P(R(a(b(R(c(Y(b(U(B!
LANGUAGE (NATIVE NAME) HELLO
---------------------- -----
Amharic ($(3"c!<!N"^(B) $(3!A!,!>(B
Arabic (38R(47d(3T!JSa(4W(3W(B
Braille $,2(3(1('('(5(B
Bulgarian (,LQj[SP`aZX(B) ,L7T`PRUYbU(B
C printf ("Hello, world!\n");
Czech (,Bh(Be,B9(Btina) Dobr,B}(B den
Danish (dansk) Hej, Goddag, Hall,Ax(Bj
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
Hungarian (magyar) Sz,Bi(Bp j,Bs(B napot!
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 (svenska) Hej, Goddag, Hall,Ae(B
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
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
;;; Local Variables:
;;; tab-width: 32
;;; End:

View file

@ -1,442 +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.
[As of April 2005, this address is:
Free Software Foundation
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301, USA
Voice: +1-617-542-5942
Fax: +1-617-542-2652
]
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.

647
etc/JOKES
View file

@ -1,647 +0,0 @@
The Free Software Foundation claims no copyright on this file,
compiled largely from postings to public newsgroups and mailing lists,
and the GNU project email archives.
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,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.

File diff suppressed because it is too large Load diff

View file

@ -1,335 +0,0 @@
GNU Project Electronic Mailing Lists and gnUSENET Newsgroups
Last Updated 2006-06-03
Please report improvements to: gnu@gnu.org
See the end of this file for copyright notice and copying conditions
* 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:
Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this file, to deal in the file without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the file, and to
permit persons to whom the file is furnished to do so, subject to
the following condition:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the file.
arch-tag: 6e42bba8-7532-4a23-8486-99dbc5770a8e

File diff suppressed because it is too large Load diff

View file

@ -1,298 +0,0 @@
More Neat Stuff for your Emacs
Copyright (C) 1993, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
See the end of the file for license conditions.
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.damtp.cam.ac.uk/user/eglen/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>.
* Emacs tutorials and manuals
* Emacs slides and tutorials can be found here:
<URL:http://stuff.mit.edu/iap/emacs/>
* 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:http://www-cdf.fnal.gov/~sthrlnd/emacs/>
* BS: <URL:http://www.geekware.de/software/emacs/index.html>
* Calculator: <URL:http://www.barzilay.org/misc/calculator.el>
* CC mode: <URL:http://cc-mode.sourceforge.net/>
* CPerl: <URL:http://www.cpan.org/modules/by-module/CPAN/ILYAZ/cperl-mode/>
* Ediff and Viper: <URL:http://www.cs.sunysb.edu/~kifer/emacs.html>
* Eldoc and Rlogin:
<URL:http://www.splode.com/~friedman/software/emacs-lisp/>
* ERC: IRC client:
<URL:http://www.emacswiki.org/cgi-bin/wiki?EmacsIRCClient>
* EShell: <URL:http://www.newartisans.com/johnw/emacs.html>
* Etags: <URL:ftp://pot.potorti.it/pub/software/unix/etags.tar.gz>
* Expand: <URL:http://w3.teaser.fr/%7Eflepied/expand.el.gz>
* 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.eng.utah.edu/~kstevens/ispell-page.html>
* MH-E: <URL:http://mh-e.sourceforge.net/>
* PS mode: <URL:http://odur.let.rug.nl/%7Ekleiweg/postscript/>
* PS-print: <URL:http://www.emacswiki.org/cgi-bin/wiki/PsPrintPackage>
* QuickURL: <URL:http://www.davep.org/emacs/>
* RefTeX: <URL:http://www.gnu.org/software/auctex/reftex.html>
* Speedbar, Checkdoc etc: <URL:http://cedet.sourceforge.net/>
* SQL: <URL:http://www.emacswiki.org/cgi-bin/wiki/sql.el>
* 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/whitespace.el>
* 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/>
(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: <URL:http://www.gnu.org/software/auctex/>
An extensible package that supports writing and formatting TeX
files (including AMS-TeX, LaTeX, Texinfo, ConTeXt, and docTeX).
* 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://ritter.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 Muse: <URL:http://www.mwolson.org/projects/EmacsMuse.html>
An authoring and publishing environment for Emacs.
* Emacs speaks statistics (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://www.mwolson.org/projects/EmacsWiki.html>
A wiki-like publishing tool and personal information manager
* Gnuserv:
<URL:http://www.hpl.hp.com/personal/ange/gnuserv/home.html>
Enhanced emacsclient/emacsserver. Also available from this Web
page: eiffel-mode.el.
* Go in a buffer: Go Text Protocol client:
<URL:http://www.glug.org/people/ttn/software/personal-elisp/standalone/>
A modified version is also bundled with GNU Go:
<URL:http://www.gnu.org/software/gnugo/gnugo.html>
* hm--html-menus:
<URL:ftp://sunsite.unc.edu/pub/Linux/apps/editors/emacs/>
HTML-specific editing. Can work with PSGML.
* Hyperbole:
<URL:http://directory.fsf.org/hyperbole.html>
Hyperbole is an open, efficient, programmable information
management and hypertext system.
* 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://wjsullivan.net/PlannerMode>
Planner is an organizer and day planner for Emacs.
* Preview LaTeX: embed preview LaTeX images in source buffer.
<URL:http://www.gnu.org/software/auctex/preview-latex>
* 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.nongnu.org/viewmail/> Alternative
mail reader. There is a VM newsgroup: <URL:news:gnu.emacs.vm.info>
* W3: <URL:http://savannah.gnu.org/projects/w3/>
Web browser. There's a W3 mail list/newsgroup
<URL:http://savannah.gnu.org/mail/?group=w3>.
* 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://cristal.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.sourceforge.net/>
Quasi-WYSIWYG editing of TeX & al.
Local Variables:
mode: text
mode: view
eval: (goto-address)
End:
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
arch-tag: c1d4e7c8-db85-44e6-909e-659e2b20fefa

View file

@ -1,179 +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]
Verbatim copying and distribution is permitted in any medium
provided this notice is preserved.
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,126 +0,0 @@
### Makefile for Emacs etc/ directory
## Copyright (C) 1993, 1994, 2001, 2002, 2003, 2004, 2005, 2006,
## 2007 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., 51 Franklin Street, Fifth Floor,
## Boston, MA 02110-1301, USA.
## Top-level targets.
## PS files included with Emacs.
all: refcards dired-refcards misc-refcards
refcards: refcard.ps cs-refcard.ps de-refcard.ps fr-refcard.ps \
pl-refcard.ps pt-br-refcard.ps ru-refcard.ps sk-refcard.ps
dired-refcards: dired-ref.ps cs-dired-ref.ps fr-drdref.ps sk-dired-ref.ps
## No PS files: vipcard.tex viperCard.tex survival.tex sk-survival.tex
misc-refcards: calccard.ps gnus-booklet.ps gnus-refcard.ps orgcard.ps
## Following PS files are not included with Emacs.
survival-cards: survival.ps cs-survival.ps sk-survival.ps
viper-cards: vipcard.ps viperCard.ps
## dvi files.
## FIXME the sk-*.tex files say to use csplain, but were not
## traditionally in this rule. Fix the doc or the rule.
cs-refcard.dvi cs-dired-ref.dvi cs-survival.dvi: %.dvi: %.tex
csplain $<
pl-refcard.dvi: %.dvi: %.tex
if ! kpsewhich -format=fmt mex > /dev/null; then \
echo "No mex format found."; false; \
fi
tex $<
ru-refcard.dvi gnus-refcard.dvi: %.dvi: %.tex
latex $<
gnus-booklet.dvi: gnus-refcard.tex
latex '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}'
mv gnus-refcard.dvi $@
## Everything not explicitly listed above.
%.dvi: %.tex
tex $<
## PostScript files.
## Note that some of the tex files (refcard, de-refcard, fr-refcard,
## pt-br-refcard) have settings for letter or a4 paper. Following are
## the default paper sizes (letter for English, A4 for translations).
## FIXME orgcard.ps does not fit on letter (see orgcard.tex).
## A4, landscape.
de-refcard.ps fr-refcard.ps pt-br-refcard.ps orgcard.ps: %.ps: %.dvi
dvips -t a4 -t landscape $<
## A4, portrait.
cs-dired-ref.ps cs-refcard.ps cs-survival.ps fr-drdref.ps \
pl-refcard.ps ru-refcard.ps \
sk-dired-ref.ps sk-refcard.ps sk-survival.ps: %.ps: %.dvi
dvips -t a4 $<
## letter, landscape.
calccard.ps refcard.ps: %.ps: %.dvi
dvips -t letter -t landscape $<
## letter, portrait.
dired-ref.ps gnus-booklet.ps gnus-refcard.ps survival.ps vipcard.ps \
viperCard.ps: %.ps: %.dvi
dvips -t letter $<
.PHONY: mostlyclean clean distclean maintainer-clean unlock relock
mostlyclean:
-rm -f *.dvi *.log
## Note does not delete generated ps files.
clean distclean maintainer-clean: mostlyclean
-rm -f DOC*
SOURCES = [0-9A-QS-Z]* README *.[ch16] emacs.* ms-* \
spook-lines termcap.* *.tex
unlock:
chmod u+w $(SOURCES)
relock:
chmod u-w $(SOURCES)
# ${etcdir}/e/eterm-color 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-color: e/eterm-color.ti
TERMINFO=`pwd`; export TERMINFO; $(TIC) e/eterm-color.ti
## arch-tag: 4261f003-cf77-4478-a10a-5284e9d8f797
### Makefile ends here

5379
etc/NEWS

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

View file

@ -1,13 +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-deductible 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

View file

@ -1,54 +0,0 @@
Copyright (C) 1992, 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
See the end of the file for license conditions.
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.
COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
The files splash.xpm, splash8.xpm contain copyright and license
information, but it is reproduced here for convenience.
Files: splash.pbm, splash.xpm, splash8.xpm, gnus.pbm, gnus-logo.eps
Author: Luis Fernandes <elf@ee.ryerson.ca>
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
License: GNU General Public License version 2 or later (see COPYING)
File: emacs.icon
Author: Sun Microsystems, Inc
Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
License: GNU General Public License version 2 or later (see COPYING)
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.

View file

@ -1,10 +0,0 @@
GNU Service Directory
---------------------
Please see <http://www.fsf.org/resources/service/> for a list of
people who have asked to be listed as offering support services for
GNU software, including GNU Emacs, for a fee or in some cases at no
charge.
arch-tag: 1253ce32-1cbd-428a-ac36-70ed9e3999fc

250
etc/TERMS
View file

@ -1,250 +0,0 @@
Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
See the end of the file for copying permissions.
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,
COPYING PERMISSIONS:
This document 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

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-software 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.(2)
(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.
(2) We now use the GNU Free Documentation License for documentation.
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 a 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(1), 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.
(1) This license is now called the GNU Lesser General Public License,
to avoid giving the idea that all libraries ought to use it.
See http://www.gnu.org/philosophy/why-not-lgpl.html.
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 (1),
and the reliability and power of some free software, we must not stop
there. We must talk about freedom and principle.
(1) It would have been clearer to write `of the "bazaar" model', since
that was the alternative that was new and initially controversial.
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.

614
etc/TODO
View file

@ -1,614 +0,0 @@
Emacs TODO List -*-outline-*-
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
See the end of the file for license conditions.
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 compilation when Xaw3d libraries are present but libxaw is not.
In new X11 versions, xaw3dg-dev does not depend on libxaw-dev, so the
latter need not be installed. As a result, all the source files that
look for include files in X11/Xaw should look in X11/Xaw3d if we are
using Xaw3d.
** Compute the list of active keymaps *after* reading the first event.
** Avoid using "iff" in doc strings.
** mouse-autoselect-window should wait to select the window until
the mouse is put to rest or after a delay or both, so that moving over
a window doesn't select it.
** In C-x d, the default if you type RET should be the directory name,
but if you type M-n you should get the visited file name of the
current buffer.
** describe-face should show an example of text in the face.
** Distribute a bar cursor of width > 1 evenly between the two glyphs
on each side of the bar (what to do at the edges?).
** Make vc-checkin avoid reverting the buffer if has not changed after
the checkin. Comparing (md5 BUFFER) to (md5 FILE) should be enough.
** buffer-offer-save should be a permanent local.
** revert-buffer should eliminate overlays and the mark.
** erase-buffer should perhaps disregard read-only properties of text.
** Make occur correctly handle matches that span more than one line,
as well as overlapping matches.
** 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.
** Feature to change cursor shape when Emacs is idle (for more than
a specified time).
** 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>.
** Enhance scroll-bar to handle tall line (similar to line-move).
** Make occur handle multi-line matches cleanly with context.
** In Custom buffers, put the option that turns a mode on or off first,
using a heuristic of some kind?
** Define recompute-arg and recompute-arg-if for fix_command to use.
See rms message of 11 Dec 05.
** Height returned by frame-parameter ... and height given to
make-frame does not mean the same thing. The former includes menu and
tool bar lines, the latter don't. frame-parameter should return height
without menu and tool bar lines.
** In Emacs Info, examples of using Customize should be clickable
and they should create Custom buffers.
** The toolbar should show keyboard equivalents in its tooltips.
** Add function to redraw the tool bar.
** M-! M-n should fetch the buffer-file-name as the default.
** Redesign the load-history data structure so it can cope better
with evaluating definitions of the same function from different files,
recording which file the latest definition came from.
** make back_comment use syntax-ppss or equivalent.
** Improve configure's treatment of NON_GNU_CPP on Solaris.
(patch available for after Emacs 22)
** Consider improving src/sysdep.c's search for a fqdn.
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00782.html
** Find a proper fix for rcirc multiline nick adding.
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00684.html
* Important features:
** Provide user-friendly ways to list all available font families,
list fonts, display a font as a sample, etc. [fx is looking at
multilingual font selection for the Unicode branch of Emacs.]
** Provide a convenient way to select a color with the mouse.
** Rewrite the face code to be simpler, clearer and faster.
** 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/.] This task seems to be addressed
by http://savannah.nongnu.org/projects/emacs-rtf/, which is still in
very early stages.
** Implement something better than the current Refill mode. This
probably needs some primitive support.
** Add a command to make a "Local Variables" section in the current buffer
and/or add a variable to the list.
** 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.
** Internationalize Emacs's messages.
** Set up a facility to save backtraces when errors happen during
specified filters, specified timers, and specified hooks.
** Install mmc@maruska.dyndns.org's no-flicker change.
** Add a "current vertical pixel level" value that goes with point,
so that motion commands can also move through tall images.
This value would be to point as window-vscroll is to window-start.
** 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:
** Remove the default toggling behavior of minor modes when called from elisp
rather than interactively. This a trivial one-liner in easy-mode.el.
** Create a category of errors called `user-error' for errors which are
typically due to pilot errors and should thus be in debug-ignored-errors.
** Give Tar mode all the features of Archive mode.
** Create a category of errors called `process-error'
for some or all errors associated with using subprocesses.
** Maybe reinterpret `parse-error' as a category of errors
and put some other errors under it.
** A function to tell you the argument pattern of functions.
See `function-arity' in http://www.loveshack.ukfsn.org/emacs/fx-misc.el.
** Make byte-compile warn when a doc string is too wide.
** Make byte-optimization warnings issue accurate line numbers.
** 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.
** Record the sxhash of the default value for customized variables
and notify the user (maybe by adding a menu item or toolbar button,
as the detection can occur during autoload time) when the default
changes (meaning that new versions of the Lisp source with a changed
default value got installed) and offer ediff on the respective
customization buffers.
** 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.
** Add a function to get the insertion-type of the markers in an overlay.
** ange-ftp
*** understand sftp
This is hard to make work because sftp doesn't print status
messages.
*** 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.
** Switch the Windows port to using Unicode keyboard input (maybe).
Based on http://msdn2.microsoft.com/en-us/library/ms633586.aspx,
this boils down to (1) calling RegisterClassW function to register
Emacs windows, and (2) modifying ALL system messages to use Unicode.
In particular, WM_CHAR messages, which result from keyboard input,
will then come in encoded in UTF-16.
One advantage of switching to Unicode is to toss encoded-kbd usage,
which will solve the problem with binding non-ASCII keys with
modifiers.
Problem: using this on Windows 9x/ME requires installing the
Microsoft Layer for Unicode (MSLU), which might not implement all
the required functionality that is available built-in on Windows XP
and later. We should not make this change if it would pressure
users of unauthorized copies of older versions of Windows to
downgrade to versions that require activation.
** 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. See
http://www.loveshack.ukfsn.org/emacs/multi-mode.el and also
mmm-mode, as reference for approaches took by others.
** Arrange a way for an input method to return the first character
immediately, then replace it later. So that C-s a with
input method latin-1-postfix would immediately search for an a.
** 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.]
** Add a cpio mode, more or less like tar mode.
** 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.] See also
http://www.loveshack.ukfsn.org/emacs/auto-crypt.tgz.
** 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; see the XMenu* functions on msdos.c.
** 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. [See the multi-tty branch of Emacs
at http://lorentey.hu/project/emacs.]
** 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 GCC 4.x and 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.
** 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 definitions for symbol properties, for documentation purposes.
** Add horizontal scroll bars.
** Provide an optional feature which computes a scroll bar slider's
size and its position from lines instead of characters.
** 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?).
** Display images with alpha channels, such as png, with the current
background color of whatever frame it is displayed in. Currently, we
use the default background color if specified in the png file, or, if
that is unspecified, the background color of the frame in which the
image was first created. Ideally, the image should display the
background color of whichever frame it is being displayed in. The
main complication is that this will require the loading of a new image
object for each different background color.
** 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).
** Make byte-compile avoid binding an expanded defsubst's args
when the body only calls primitives.
** 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.
** Make `format-time-string' preserve text properties like `format'.
** Optionally make the cursor a little thinner at the end of a line
or the end of the buffer.
** 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. Note
that Boehm garbage collector provides this.
** 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.
** Enhance locale handling: handle language, territory and charset
orthogonally and de-emphasize language environments. Use the locale
to set up more things, such as fontsets, the default Ispell
dictionary, diary format, calendar holidays and display, quoting
characters and phrase boundaries, sentence endings, collation for
sorting (at least for unicodes), HTTP Accept-language, patterns for
directory listings and compilation messages, yes-or-no replies,
common menu items when the toolkit supports it ... `locale-info'
needs extending for LC_COLLATE &c. [fx started on this.]
** 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.
** Let LEIM handle the Mode_switch key like XIM does (i.e. a toggle like C-\
but which can also be used as a modifier).
** Improve Help buffers: Change the face of previously visited links (like
Info, but also with regard to namespace), add a forward button to make the
Help buffer more browser like and gives the value of lisp expressions
e.g auto-mode-alist, the right face. [nickrob@snap.net.nz has a patch
for this for inclusion after 22.1].
** Possibly make `list-holidays' eval items in the calendar-holidays variable.
See thread
<http://lists.gnu.org/archive/html/emacs-devel/2006-02/msg01034.html>.
[rgm@gnu.org will look at this after 22.1]
** Possibly make cal-dst use the system timezone database directly.
See thread
<http://lists.gnu.org/archive/html/emacs-pretest-bug/2006-11/msg00060.html>
* Internal changes
** Cleanup all the GC_ mark bit stuff -- there is no longer any distinction
since the mark bit is no longer stored in the Lisp_Object itself.
** Merge ibuffer.el and buff-menu.el.
More specifically do what's needed to make ibuffer.el the default,
or just an extension of buff-menu.el.
** Use pcomplete by default in shell-mode.
This means to make it behave (by default) more like the current code.
Use it also for read-shell-command, M-x compile, ...
** Merge sendmail.el and messages.el.
Probably not a complete merge, but at least arrange for messages.el to be
a derived mode of sendmail.el. Or arrange for messages.el to be split
into a small core and "the rest" so that we use less resources as long as
we stick to the features provided in sendmail.el.
** 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, ...
** Make SYNC_INPUT the default.
All loops using immediate_quit need to be checked to ensure that
C-g can interrupt them, in case of an infinite loop. Once we
switch to using SYNC_INPUT, we can remove the BLOCK_INPUTs in the
allocation functions (allocate_string etc.) without worrying about
data munging.
** Add "link" button class
Add a standard button-class named "link", and make all other link-like
button classes inherit from it. Set the default face of the "link" button
class to the standard "link" face.
* Other known bugs:
** a two-char comment-starter whose two chars are symbol constituents will
not be noticed if it appears within a word.
** Fix unexelf.c to handle the .data.rel and .data.rel.local
sections made by GCC 3.4 on IRIX.
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
;;; 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

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