mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-06-14 12:31:25 +00:00
Version sent by ESR on Tue, 10 Jul 2007 19:17:41.
This commit is contained in:
parent
0f7ea45318
commit
6db762b6bf
2496 changed files with 506 additions and 2373427 deletions
|
|
@ -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
47
.gitignore
vendored
|
|
@ -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
|
||||
26
BUGS
26
BUGS
|
|
@ -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.
|
||||
204
CONTRIBUTE
204
CONTRIBUTE
|
|
@ -1,204 +0,0 @@
|
|||
|
||||
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 emacs-bugs@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 mail.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
|
||||
|
||||
** 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.
|
||||
|
||||
|
||||
Local variables:
|
||||
mode: outline
|
||||
paragraph-separate: "[ ]*$"
|
||||
end:
|
||||
|
||||
340
COPYING
340
COPYING
|
|
@ -1,340 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin St, 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 Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, 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 Library General
|
||||
Public License instead of this License.
|
||||
234
FTP
234
FTP
|
|
@ -1,234 +0,0 @@
|
|||
-*- text -*-
|
||||
How to get GNU Software by Internet FTP or by UUCP. Last updated 1999-01-20
|
||||
|
||||
* Please send improvements to this file to gnu@gnu.org.
|
||||
|
||||
* No Warranties
|
||||
|
||||
We distribute software in the hope that it will be useful, but without
|
||||
any warranty. No author or distributor of this software accepts
|
||||
responsibility to anyone for the consequences of using it or for
|
||||
whether it serves any particular purpose or works at all, unless he
|
||||
says so in writing. This is exactly the same warranty that the proprietary
|
||||
software companies offer: None. If the distribution is incomplete or the
|
||||
media fails, you can always download a replacement from any of the GNU
|
||||
mirrors, free of charge.
|
||||
|
||||
* Updates
|
||||
|
||||
You can always find the most recent version of this list of GNU FTP sites at
|
||||
http://www.gnu.org/order/ftp.html
|
||||
|
||||
* How to FTP
|
||||
|
||||
Use the ftp program on your system (ask locally if you can't find it)
|
||||
to connect to the host you are ftping from. Unless indicated
|
||||
otherwise, login in as user "anonymous", with password: "your e-mail
|
||||
address" and set "binary" mode (to transfer all eight bits in each
|
||||
byte).
|
||||
|
||||
ALWAYS USE BINARY/IMAGE MODE TO TRANSFER THESE FILES!
|
||||
Text mode does not work for tar files or compressed files.
|
||||
|
||||
* GNU Software and How To FTP It
|
||||
|
||||
GNU software is available on ftp.gnu.org under the directory /gnu.
|
||||
diff files to convert between versions exist for some of these
|
||||
programs. Some programs have misc support files as well. Have a look
|
||||
on ftp.gnu.org to see which ones. In most cases, the tar or diff
|
||||
files are compressed with the `gzip' program; this is indicated with
|
||||
the .gz suffix. Binaries for gzip can be downloaded from
|
||||
http://www.gzip.org.
|
||||
|
||||
Descriptions of GNU software are available at
|
||||
http://www.gnu.org/software/software.html
|
||||
and in the Free Software Directory at
|
||||
http://www.gnu.org/directory/index.html
|
||||
|
||||
* Alternative Internet FTP Sources
|
||||
|
||||
The canonical GNU ftp site is located at ftp.gnu.org/gnu.
|
||||
You should probably use one of the many mirrors of that site - the
|
||||
mirrors will be less busy, and you can find one closer to your site.
|
||||
|
||||
* GNU FTP Site Mirror List
|
||||
|
||||
United States:
|
||||
|
||||
|
||||
California - mirrors.kernel.org/gnu, http://mirrors.kernel.org/gnu
|
||||
California - gatekeeper.dec.com/pub/GNU/
|
||||
California - ftp.keystealth.org/pub/gnu/
|
||||
Illinois - uiarchive.cso.uiuc.edu/pub/ftp/ftp.gnu.org/gnu/
|
||||
Indiana - ftp.in-span.net/pub/mirrors/ftp.gnu.org/
|
||||
Kentucky - gnu.ms.uky.edu/pub/mirrors/gnu/
|
||||
Maryland - ftp.digex.net/pub/gnu/
|
||||
Massachusetts - aeneas.mit.edu/pub/gnu/
|
||||
Michigan - ftp.egr.msu.edu/pub/gnu/, http://ftp.egr.msu.edu/pub/gnu/
|
||||
Michigan - ftp.wayne.edu/gnu_mirror/
|
||||
Missouri - wuarchive.wustl.edu/systems/gnu/
|
||||
New Jersey - gnu.teleglobe.net/ftp.gnu.org/
|
||||
New York - ftp.cs.columbia.edu/archives/gnu/prep/
|
||||
New York - ftp.ece.cornell.edu/pub/mirrors/gnu/
|
||||
North Carolina - http://www.ibiblio.org/pub/gnu/
|
||||
Ohio - ftp.cis.ohio-state.edu/mirror/gnu/
|
||||
Pennsylvania - boron.club.cc.cmu.edu/gnu/
|
||||
Tennessee - sunsite.utk.edu/pub/gnu/ftp/, thales.memphis.edu/pub/gnu/
|
||||
Washington - ftp.nodomainname.net/pub/mirrors/gnu/, gnu.wwc.edu/
|
||||
Wisconsin - ftp.twtelecom.net/pub/GNU/
|
||||
|
||||
Africa:
|
||||
|
||||
South Africa - ftp.sun.ac.za/mirrorsites/ftp.gnu.org/pub/gnu
|
||||
|
||||
The Americas:
|
||||
|
||||
Brazil - ftp.unicamp.br/pub/gnu/
|
||||
Brazil - master.softaplic.com.br/pub/gnu/
|
||||
Brazil - ftp.matrix.com.br/pub/gnu/
|
||||
Canada - ftp.cs.ubc.ca/mirror2/gnu/
|
||||
Chile - ftp.inf.utfsm.cl/pub/gnu/
|
||||
Costa Rica - sunsite.ulatina.ac.cr/Mirrors/GNU/
|
||||
Mexico - www.gnu.unam.mx/pub/gnu/software/
|
||||
Mexico - gnu.cem.itesm.mx/pub/mirrors/gnu.org/
|
||||
Mexico - ftp.azc.uam.mx/mirrors/gnu/
|
||||
|
||||
Australia:
|
||||
|
||||
Australia - mirror.aarnet.edu.au/pub/gnu/
|
||||
Australia - gnu.mirror.pacific.net.au/gnu/
|
||||
|
||||
Asia:
|
||||
|
||||
China - ftp.sea9.com/pub/gnu/
|
||||
China - ftp.cs.cuhk.edu.hk/pub/gnu/gnu/
|
||||
China - sunsite.ust.hk/pub/gnu/
|
||||
China - ftp.shellhung.org/pub/gnu/
|
||||
India - ftp.kernel.org.in/gnu.org/
|
||||
India - http://kernel.org.in/mirrors/gnu.org/
|
||||
India - www.imtech.res.in/mirror/gnuftp/
|
||||
Indonesia - sapi.vlsm.org/gnu
|
||||
Indonesia - http://sapi.vlsm.org/gnu/
|
||||
Israel - ftp.cs.huji.ac.il/mirror/GNU
|
||||
Japan - tron.um.u-tokyo.ac.jp/pub/GNU/prep/
|
||||
Japan - core.ring.gr.jp/pub/GNU/
|
||||
Japan - ftp.ring.gr.jp/pub/GNU/
|
||||
Japan - mirrors.hbi.co.jp/gnu/
|
||||
Japan - ftp.ayamura.org/pub/gnu/
|
||||
Korea - cair-archive.kaist.ac.kr/pub/gnu/ (Internet address 143.248.186.3)
|
||||
Korea - ftpmirror.hanyang.ac.kr/GNU/
|
||||
Korea - ftp.linux.sarang.net/mirror/gnu/gnu/ (also mirrors alpha.gnu.org/gnu/ at ../alpha/)
|
||||
Korea - ftp.xgate.co.kr/pub/mirror/gnu/
|
||||
Saudi Arabia - ftp.isu.net.sa/pub/gnu/
|
||||
Taiwan - ftp.nctu.edu.tw/UNIX/gnu/, coda.nctu.edu.tw/UNIX/gnu/
|
||||
Taiwan - ftp1.sinica.edu.tw/pub3/GNU/gnu/
|
||||
Thailand - ftp.nectec.or.th/pub/mirrors/gnu/
|
||||
|
||||
Europe:
|
||||
|
||||
Austria - ftp.gnu.vbs.at/
|
||||
Austria - ftp.univie.ac.at/packages/gnu/
|
||||
Austria - gd.tuwien.ac.at/gnu/gnusrc/
|
||||
Austria - http://gd.tuwien.ac.at/gnu/gnusrc/
|
||||
Czech Republic - ftp.fi.muni.cz/pub/gnu/
|
||||
Denmark - ftp.denet.dk/mirror/ftp.gnu.org/pub/gnu
|
||||
Denmark - ftp.dkuug.dk/pub/gnu/
|
||||
Denmark - sunsite.dk/mirrors/gnu, http://mirrors.sunsite.dk/gnu
|
||||
Finland - ftp.funet.fi/pub/gnu/prep/
|
||||
France - ftp.irisa.fr/pub/gnu/
|
||||
France - ftp.medasys-digital-systems.fr/pub/gnu/
|
||||
France - ftp.cs.univ-paris8.fr/mirrors/ftp.gnu.org/
|
||||
Germany - ftp.cs.tu-berlin.de/pub/gnu/
|
||||
Germany - ftp.fh-worms.de/pub/mirror/ftp.gnu.org/
|
||||
Germany - ftp.leo.org/pub/comp/os/unix/gnu/
|
||||
Germany - ftp.informatik.rwth-aachen.de/pub/gnu/
|
||||
Germany - ftp.de.uu.net/pub/gnu/
|
||||
Germany - ftp.freenet.de/pub/ftp.gnu.org/gnu/
|
||||
Germany - ftp.cs.uni-bonn.de/pub/gnu/
|
||||
Germany - ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.gnu.org/
|
||||
Germany - http://ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.gnu.org/
|
||||
Germany - ftp.stw-bonn.de/pub/mirror/ftp.gnu.org/
|
||||
Greece - ftp.forthnet.gr/pub/gnu/
|
||||
Greece - ftp.ntua.gr/pub/gnu/
|
||||
Greece - ftp.duth.gr/pub/gnu/
|
||||
Greece - ftp.physics.auth.gr/pub/gnu/
|
||||
Ireland - ftp.esat.net/pub/gnu/ (Internet address 193.120.14.241)
|
||||
Italy - ftp.oasi.gpa.it/pub/gnu/
|
||||
Italy - ftp.lugroma2.org/pub/gnu/
|
||||
Netherlands - ftp.nluug.nl/pub/gnu/
|
||||
Netherlands - ftp.mirror.nl/pub/mirror/gnu/
|
||||
Netherlands - ftp.nl.uu.net/pub/gnu/
|
||||
Netherlands - mirror.widexs.nl/pub/gnu/
|
||||
Norway - ftp.gnu.no/
|
||||
Poland - sunsite.icm.edu.pl/pub/gnu/
|
||||
Portugal - ftp.ist.utl.pt/pub/GNU/gnu/
|
||||
Romania - ftp.timisoara.roedu.net/mirrors/ftp.gnu.org/pub/gnu
|
||||
Russia - ftp.chg.ru/pub/gnu/
|
||||
Slovenia - ftp.arnes.si/software/gnu/
|
||||
Spain - ftp.etsimo.uniovi.es/pub/gnu/
|
||||
Spain - ftp.rediris.es/pub/gnu/
|
||||
Sweden - ftp.isy.liu.se/pub/gnu/
|
||||
Sweden - ftp.stacken.kth.se/pub/gnu/
|
||||
Sweden - ftp.sunet.se/pub/gnu/; also mirrors /non-gnu
|
||||
Sweden - ftp.chl.chalmers.se/pub/gnu/
|
||||
Switzerland - sunsite.cnlab-switch.ch/mirror/gnu/
|
||||
Ukraine - mirddin.farlep.net/pub/GNU/
|
||||
United Kingdom - ftp.mcc.ac.uk/pub/gnu/
|
||||
United Kingdom - ftp.mirror.ac.uk/sites/ftp.gnu.org/pub/gnu/
|
||||
United Kingdom - ftp.warwick.ac.uk/pub/gnu/ (Internet address 137.205.192.13)
|
||||
United Kingdom - ftp.hands.com/ftp.gnu.org/
|
||||
United Kingdom - gnu.teleglobe.net/ftp.gnu.org/
|
||||
|
||||
* How to FTP GNU Emacs
|
||||
|
||||
Emacs is in the directory /gnu/emacs on ftp.gnu.org. The emacs
|
||||
distribution itself has a filename in the form emacs-M.N.tar.gz, where
|
||||
M and N stand for the version numbers; the Emacs Lisp Reference Manual
|
||||
is in a separate file, named elisp-manual-NN.tar.gz.
|
||||
|
||||
* Scheme and How to FTP It
|
||||
|
||||
The latest distribution version of C Scheme is available via anonymous FTP
|
||||
from swiss-ftp.ai.mit.edu in /pub/scheme-X.X/ (where X.X is some version
|
||||
number).
|
||||
|
||||
Read the files INSTALL and README in the top level C Scheme directory.
|
||||
|
||||
* TeX and How to Obtain It
|
||||
|
||||
We don't distribute TeX now, but it is free software.
|
||||
|
||||
TeX is a document formatter that is used, among other things, by the FSF
|
||||
for all its documentation. You will need it if you want to make printed
|
||||
manuals.
|
||||
|
||||
TeX is freely redistributable. You can get it by ftp, tape, or CD/ROM.
|
||||
|
||||
** For FTP instructions, retrieve the file
|
||||
ftp.cs.umb.edu/pub/tex/unixtex.ftp. (We don't include it here because it
|
||||
changes relatively frequently. Sorry.)
|
||||
|
||||
** A minimal TeX collection (enough to process Texinfo files, anyway)
|
||||
is included on the GNU source CD-ROM. See the file ORDERS in this
|
||||
directory for more information.
|
||||
|
||||
* GNU Software for VMS
|
||||
|
||||
- http://www.lp.se/gnu-vms/- lots of GNU ports to VMS,
|
||||
including Emacs 19, GCC, Bison, Make, RCS.
|
||||
|
||||
* If You Like The Software
|
||||
|
||||
If you like the software developed and distributed by the Free
|
||||
Software Foundation, please express your satisfaction with a donation.
|
||||
Your donations will help to support the Foundation and make our future
|
||||
efforts successful. The Foundation continues to improve GNU programs
|
||||
and encourage the writing of new free software to enhance GNU/Linux
|
||||
and GNU/Hurd systems. For more information on GNU and the Foundation,
|
||||
see our web site at http://www.gnu.org.
|
||||
|
||||
Ordering a GNU Source Code CD-ROM or Source Code CD-ROM Subscription
|
||||
is a good way for your organization to help support our work. You can
|
||||
also purchase printed manuals, reference cards, t-shirts, and other
|
||||
items. See our online ordering form at http://order.fsf.org for
|
||||
details.
|
||||
911
INSTALL
911
INSTALL
|
|
@ -1,911 +0,0 @@
|
|||
GNU Emacs Installation Guide
|
||||
Copyright (c) 1992, 1994, 1996, 1997, 2000, 2001, 2002, 2006
|
||||
Free software Foundation, Inc.
|
||||
See the end of the file for copying permissions.
|
||||
|
||||
|
||||
BASIC INSTALLATION
|
||||
|
||||
The simplest way to build Emacs is to use the `configure' shell script
|
||||
which attempts to guess correct values for various system-dependent
|
||||
variables and features and find the directories where various system
|
||||
headers and libraries are kept. It then creates a `Makefile' in each
|
||||
subdirectory and a `config.h' file containing system-dependent
|
||||
definitions. Running the `make' utility then builds the package for
|
||||
your system.
|
||||
|
||||
Here's the procedure to build Emacs using `configure' on systems which
|
||||
are supported by it. If this simplified procedure fails, or if you
|
||||
are using a platform such as MS-Windows, where `configure' script
|
||||
doesn't work, you might need to use various non-default options, and
|
||||
maybe perform some of the steps manually. The more detailed
|
||||
description in the rest of the sections of this guide will help you do
|
||||
that, so please refer to them if the simple procedure does not work.
|
||||
|
||||
1. Make sure your system has at least 120 MB of free disk space.
|
||||
|
||||
2a. `cd' to the directory where you unpacked Emacs and invoke the
|
||||
`configure' script:
|
||||
|
||||
./configure
|
||||
|
||||
2b. Alternatively, create a separate directory, outside the source
|
||||
directory, where you want to build Emacs, and invoke `configure'
|
||||
from there:
|
||||
|
||||
SOURCE-DIR/configure
|
||||
|
||||
where SOURCE-DIR is the top-level Emacs source directory. This
|
||||
may not work unless you use GNU make.
|
||||
|
||||
3. When `configure' finishes, it prints several lines of details
|
||||
about the system configuration. Read those details carefully
|
||||
looking for anything suspicious, such as wrong CPU and operating
|
||||
system names, wrong places for headers or libraries, missing
|
||||
libraries that you know are installed on your system, etc.
|
||||
|
||||
If you find anything wrong, you will have to pass to `configure'
|
||||
explicit machine configuration name, and one or more options
|
||||
which tell it where to find various headers and libraries; refer
|
||||
to DETAILED BUILDING AND INSTALLATION section below.
|
||||
|
||||
If `configure' didn't find some image support libraries, such as
|
||||
Xpm, jpeg, etc., and you want to use them refer to the subsection
|
||||
"Image support libraries", below.
|
||||
|
||||
If the details printed by `configure' don't make any sense to
|
||||
you, assume that `configure' did its job and proceed.
|
||||
|
||||
4. If you need to run the `configure' script more than once (e.g.,
|
||||
with some non-default options), always clean the source
|
||||
directories before running `configure' again:
|
||||
|
||||
make distclean
|
||||
./configure
|
||||
|
||||
5. Invoke the `make' program:
|
||||
|
||||
make
|
||||
|
||||
6. If `make' succeeds, it will build an executable program `emacs'
|
||||
in the `src' directory. You can try this program, to make sure
|
||||
it works:
|
||||
|
||||
src/emacs -q
|
||||
|
||||
7. Assuming that the program `src/emacs' starts and displays its
|
||||
opening screen, you can install the program and its auxiliary
|
||||
files into their installation directories:
|
||||
|
||||
make install
|
||||
|
||||
You are now ready to use Emacs. If you wish to conserve disk space,
|
||||
you may remove the program binaries and object files from the
|
||||
directory where you built Emacs:
|
||||
|
||||
make clean
|
||||
|
||||
You can also save some space by compressing (with `gzip') Info files
|
||||
and installed Lisp source (.el) files which have corresponding .elc
|
||||
versions.
|
||||
|
||||
|
||||
ADDITIONAL DISTRIBUTION FILES
|
||||
|
||||
* intlfonts-VERSION.tar.gz
|
||||
|
||||
The intlfonts distribution contains X11 fonts in various encodings
|
||||
that Emacs can use to display international characters. If you see a
|
||||
non-ASCII character appear as a hollow box, that means you don't have
|
||||
a font for it. You might find one in the intlfonts distribution. If
|
||||
you do have a font for a non-ASCII character, but some characters
|
||||
don't look right, or appear improperly aligned, a font from the
|
||||
intlfonts distribution might look better.
|
||||
|
||||
The fonts in the intlfonts distribution are also used by the ps-print
|
||||
package for printing international characters. The file
|
||||
lisp/ps-mule.el defines the *.bdf font files required for printing
|
||||
each character set.
|
||||
|
||||
The intlfonts distribution contains its own installation instructions,
|
||||
in the intlfonts/README file.
|
||||
|
||||
* Image support libraries
|
||||
|
||||
Emacs needs optional libraries to be able to display images (with the
|
||||
exception of PBM and XBM images whose support is built-in).
|
||||
|
||||
On some systems, particularly on GNU/Linux, these libraries may
|
||||
already be present or available as additional packages. Note that if
|
||||
there is a separate `dev' or `devel' package, for use at compilation
|
||||
time rather than run time, you will need that as well as the
|
||||
corresponding run time package; typically the dev package will
|
||||
contain header files and a library archive. Otherwise, you can
|
||||
download and build libraries from sources. None of them are vital for
|
||||
running Emacs; however, note that Emacs will not be able to use
|
||||
colored icons in the toolbar if XPM support is not compiled in.
|
||||
|
||||
Here's the list of these optional libraries, and the URLs where they
|
||||
can be found:
|
||||
|
||||
. libXaw3d for fancy 3D-style
|
||||
scroll bars: ftp://ftp.x.org/contrib/widgets/Xaw3d/
|
||||
. libxpm for XPM: ftp://ftp.x.org/contrib/libraries/
|
||||
Get version 3.4k or later, which lets Emacs
|
||||
use its own color allocation functions.
|
||||
. libpng for PNG: ftp://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 RedHat. On Debian, the
|
||||
packages necessary to build the installed version should be
|
||||
sufficient; they can be installed using `apt-get build-dep emacs21' in
|
||||
Debian 3 and above.
|
||||
|
||||
|
||||
DETAILED BUILDING AND INSTALLATION:
|
||||
|
||||
(This is for a Unix or Unix-like system. For MS-DOS and Windows 3.X,
|
||||
see below; search for MSDOG. For Windows 9X, Windows ME, Windows NT,
|
||||
and Windows 2000, see the file nt/INSTALL. For the Mac, see the file
|
||||
mac/INSTALL.)
|
||||
|
||||
1) Make sure your system has enough swapping space allocated to handle
|
||||
a program whose pure code is 1.5 MB and whose data area is at
|
||||
least 2.8 MB and can reach 100 MB or more. If the swapping space is
|
||||
insufficient, you will get an error in the command `temacs -batch -l
|
||||
loadup dump', found in `./src/Makefile.in', or possibly when
|
||||
running the final dumped Emacs.
|
||||
|
||||
Building Emacs requires about 140 MB of disk space (including the
|
||||
Emacs sources) Once installed, Emacs occupies about 77 MB in the file
|
||||
system where it is installed; this includes the executable files, Lisp
|
||||
libraries, miscellaneous data files, and on-line documentation. If
|
||||
the building and installation take place in different directories,
|
||||
then the installation procedure momentarily requires 140+77 MB.
|
||||
|
||||
2) Consult `./etc/MACHINES' to see what configuration name you should
|
||||
give to the `configure' program. That file offers hints for
|
||||
getting around some possible installation problems. The file lists
|
||||
many different configurations, but only the part for your machine and
|
||||
operating system is relevant. (The list is arranged in alphabetical
|
||||
order by the vendor name.)
|
||||
|
||||
3) You can build Emacs in the top-level Emacs source directory
|
||||
or in a separate directory.
|
||||
|
||||
3a) To build in the top-level Emacs source directory, go to that
|
||||
directory and run the program `configure' as follows:
|
||||
|
||||
./configure [CONFIGURATION-NAME] [--OPTION[=VALUE]] ...
|
||||
|
||||
The CONFIGURATION-NAME argument should be a configuration name given
|
||||
in `./etc/MACHINES', with the system version number added at the end.
|
||||
|
||||
You should try first omitting CONFIGURATION-NAME. This way,
|
||||
`configure' will try to guess your system type. If it cannot guess,
|
||||
or if something goes wrong in building or installing Emacs this way,
|
||||
try again specifying the proper CONFIGURATION-NAME explicitly.
|
||||
|
||||
If you don't want X support, specify `--with-x=no'. If you omit this
|
||||
option, `configure' will try to figure out for itself whether your
|
||||
system has X, and arrange to use it if present.
|
||||
|
||||
The `--x-includes=DIR' and `--x-libraries=DIR' options tell the build
|
||||
process where the compiler should look for the include files and
|
||||
object libraries used with the X Window System. Normally, `configure'
|
||||
is able to find them; these options are necessary if you have your X
|
||||
Window System files installed in unusual places. These options also
|
||||
accept a list of directories, separated with colons.
|
||||
|
||||
To get more attractive menus, you can specify an X toolkit when you
|
||||
configure Emacs; use the option `--with-x-toolkit=TOOLKIT', where
|
||||
TOOLKIT is `athena', `motif' or `gtk' (`yes' and `lucid' are synonyms
|
||||
for `athena'). On some systems, it does not work to use a toolkit
|
||||
with shared libraries. A free implementation of Motif, called
|
||||
LessTif, is available 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 fatures or libraries are not
|
||||
available when you know they are, look at the `config.log' file for
|
||||
the trace of the failed tests performed by `configure' to check
|
||||
whether these features are supported. Typically, some test fails
|
||||
because the compiler cannot find some function in the system
|
||||
libraries, or some macro-processor definition in the system headers.
|
||||
|
||||
Some tests might fail because the compiler should look in special
|
||||
directories for some header files, or link against optional
|
||||
libraries, or use special compilation options. You can force
|
||||
`configure' and the build process which follows it to do that by
|
||||
setting the variables CPPFLAGS, CFLAGS, LDFLAGS, LIBS, and CC before
|
||||
running `configure'. CPPFLAGS lists the options passed to the
|
||||
preprocessor, CFLAGS are compilation options, LDFLAGS are options used
|
||||
when linking, LIBS are libraries to link against, and CC is the
|
||||
command which invokes the compiler.
|
||||
|
||||
Here's an example of a `configure' invocation, assuming a Bourne-like
|
||||
shell such as Bash, which uses these variables:
|
||||
|
||||
CPPFLAGS='-I/foo/myinclude' LDFLAGS='-L/bar/mylib' \
|
||||
CFLAGS='-O3' LIBS='-lfoo -lbar' ./configure
|
||||
|
||||
(this is all one long line). This tells `configure' to instruct the
|
||||
preprocessor to look in the `/foo/myinclude' directory for header
|
||||
files (in addition to the standard directories), instruct the linker
|
||||
to look in `/bar/mylib' for libraries, pass the -O3 optimization
|
||||
switch to the compiler, and link against libfoo.a and libbar.a
|
||||
libraries in addition to the standard ones.
|
||||
|
||||
The work of `configure' can be done by editing various files in the
|
||||
distribution, but using `configure' is easier. See the section called
|
||||
"CONFIGURATION BY HAND" below if you want to do the configuration
|
||||
yourself.
|
||||
|
||||
3b) To build in a separate directory, go to that directory
|
||||
and run the program `configure' as follows:
|
||||
|
||||
SOURCE-DIR/configure CONFIGURATION-NAME [--OPTION[=VALUE]] ...
|
||||
|
||||
SOURCE-DIR refers to the top-level Emacs source directory which is
|
||||
where Emacs's configure script is located. `configure' looks for the
|
||||
Emacs source code in the directory that `configure' is in.
|
||||
|
||||
To build in a separate directory, you must use a version of `make'
|
||||
that supports the `VPATH' variable, such as GNU `make'.
|
||||
|
||||
3c) Some people try to build in a separate directory by filling
|
||||
it full of symlinks to the files in the real source directory.
|
||||
If you do that, `make all' does work, but `make install' fails:
|
||||
it copies the symbolic links rather than the actual files.
|
||||
|
||||
As far as is known, there is no particular reason to use
|
||||
a directory full of links rather than use the standard GNU
|
||||
facilities to build in a separate directory (see 3b above).
|
||||
|
||||
4) Look at `./lisp/paths.el'; if some of those values are not right
|
||||
for your system, set up the file `./lisp/site-init.el' with Emacs
|
||||
Lisp code to override them; it is not a good idea to edit paths.el
|
||||
itself. YOU MUST USE THE LISP FUNCTION `setq' TO ASSIGN VALUES,
|
||||
rather than `defvar', as used by `./lisp/paths.el'. For example,
|
||||
|
||||
(setq news-inews-program "/usr/bin/inews")
|
||||
|
||||
is how you would override the default value of the variable
|
||||
news-inews-program (which is "/usr/local/inews").
|
||||
|
||||
Before you override a variable this way, *look at the value* that the
|
||||
variable gets by default! Make sure you know what kind of value the
|
||||
variable should have. If you don't pay attention to what you are
|
||||
doing, you'll make a mistake.
|
||||
|
||||
5) Put into `./lisp/site-init.el' or `./lisp/site-load.el' any Emacs
|
||||
Lisp code you want Emacs to load before it is dumped out. Use
|
||||
site-load.el for additional libraries if you arrange for their
|
||||
documentation strings to be in the etc/DOC file (see
|
||||
src/Makefile.in if you wish to figure out how to do that). For all
|
||||
else, use site-init.el. Do not load byte-compiled code which
|
||||
was build with a non-nil value of `byte-compile-dynamic'.
|
||||
|
||||
If you set load-path to a different value in site-init.el or
|
||||
site-load.el, Emacs will use *precisely* that value when it starts up
|
||||
again. If you do this, you are on your own!
|
||||
|
||||
Note that, on some systems, the code you place in site-init.el must
|
||||
not use expand-file-name or any other function which may look
|
||||
something up in the system's password and user information database.
|
||||
See `./etc/PROBLEMS' for more details on which systems this affects.
|
||||
|
||||
The `site-*.el' files are nonexistent in the distribution. You do not
|
||||
need to create them if you have nothing to put in them.
|
||||
|
||||
6) Refer to the file `./etc/TERMS' for information on fields you may
|
||||
wish to add to various termcap entries. The files `./etc/termcap.ucb'
|
||||
and `./etc/termcap.dat' may already contain appropriately-modified
|
||||
entries.
|
||||
|
||||
7) Run `make' in the top directory of the Emacs distribution to finish
|
||||
building Emacs in the standard way. The final executable file is
|
||||
named `src/emacs'. You can execute this file "in place" without
|
||||
copying it, if you wish; then it automatically uses the sibling
|
||||
directories ../lisp, ../lib-src, ../info.
|
||||
|
||||
Or you can "install" the executable and the other Emacs into their
|
||||
installed locations, with `make install'. By default, Emacs's files
|
||||
are installed in the following directories:
|
||||
|
||||
`/usr/local/bin' holds the executable programs users normally run -
|
||||
`emacs', `etags', `ctags', `b2m', `emacsclient',
|
||||
and `rcs-checkin'.
|
||||
|
||||
`/usr/local/share/emacs/VERSION/lisp' holds the Emacs Lisp library;
|
||||
`VERSION' stands for the number of the Emacs version
|
||||
you are installing, like `18.59' or `19.27'. Since the
|
||||
Lisp library changes from one version of Emacs to
|
||||
another, including the version number in the path
|
||||
allows you to have several versions of Emacs installed
|
||||
at the same time; in particular, you don't have to
|
||||
make Emacs unavailable while installing a new version.
|
||||
|
||||
`/usr/local/share/emacs/VERSION/etc' holds the Emacs tutorial, the DOC
|
||||
file, the `yow' database, and other
|
||||
architecture-independent files Emacs might need while
|
||||
running. VERSION is as specified for `.../lisp'.
|
||||
|
||||
`/usr/local/libexec/emacs/VERSION/CONFIGURATION-NAME' contains executable
|
||||
programs used by Emacs that users are not expected to
|
||||
run themselves.
|
||||
`VERSION' is the number of the Emacs version you are
|
||||
installing, and `CONFIGURATION-NAME' is the argument
|
||||
you gave to the `configure' program to identify the
|
||||
architecture and operating system of your machine,
|
||||
like `mips-dec-ultrix' or `sparc-sun-sunos'. Since
|
||||
these files are specific to the version of Emacs,
|
||||
operating system, and architecture in use, including
|
||||
the configuration name in the path allows you to have
|
||||
several versions of Emacs for any mix of machines and
|
||||
operating systems installed at the same time; this is
|
||||
useful for sites at which different kinds of machines
|
||||
share the file system Emacs is installed on.
|
||||
|
||||
`/usr/local/info' holds the on-line documentation for Emacs, known as
|
||||
"info files". Many other GNU programs are documented
|
||||
using info files as well, so this directory stands
|
||||
apart from the other, Emacs-specific directories.
|
||||
|
||||
`/usr/local/man/man1' holds the man pages for the programs installed
|
||||
in `/usr/local/bin'.
|
||||
|
||||
Any version of Emacs, whether installed or not, also looks for Lisp
|
||||
files in these directories.
|
||||
|
||||
`/usr/local/share/emacs/VERSION/site-lisp' holds the local Emacs Lisp
|
||||
files installed for Emacs version VERSION only.
|
||||
|
||||
`/usr/local/share/emacs/site-lisp' holds the local Emacs Lisp
|
||||
files installed for all Emacs versions.
|
||||
|
||||
When Emacs is installed, it searches for its Lisp files
|
||||
in `/usr/local/share/emacs/VERSION/site-lisp', then in
|
||||
`/usr/local/share/emacs/site-lisp', and finally in
|
||||
`/usr/local/share/emacs/VERSION/lisp'.
|
||||
|
||||
If these directories are not what you want, you can specify where to
|
||||
install Emacs's libraries and data files or where Emacs should search
|
||||
for its Lisp files by giving values for `make' variables as part of
|
||||
the command. See the section below called `MAKE VARIABLES' for more
|
||||
information on this.
|
||||
|
||||
8) Check the file `dir' in your site's info directory (usually
|
||||
/usr/local/info) to make sure that it has a menu entry for the Emacs
|
||||
info files.
|
||||
|
||||
9) If your system uses lock files to interlock access to mailer inbox files,
|
||||
then you might need to make the movemail program setuid or setgid
|
||||
to enable it to write the lock files. We believe this is safe.
|
||||
|
||||
10) You are done! You can remove executables and object files from
|
||||
the build directory by typing `make clean'. To also remove the files
|
||||
that `configure' created (so you can compile Emacs for a different
|
||||
configuration), type `make distclean'. If you don't need some, or all
|
||||
of the input methods from the Leim package, you can remove the
|
||||
unneeded files in the leim subdirectories of your site's lisp
|
||||
directory (usually /usr/local/share/emacs/VERSION/).
|
||||
|
||||
|
||||
|
||||
MAKE VARIABLES
|
||||
|
||||
You can change where the build process installs Emacs and its data
|
||||
files by specifying values for `make' variables as part of the `make'
|
||||
command line. For example, if you type
|
||||
|
||||
make install bindir=/usr/local/gnubin
|
||||
|
||||
the `bindir=/usr/local/gnubin' argument indicates that the Emacs
|
||||
executable files should go in `/usr/local/gnubin', not
|
||||
`/usr/local/bin'.
|
||||
|
||||
Here is a complete list of the variables you may want to set.
|
||||
|
||||
`bindir' indicates where to put executable programs that users can
|
||||
run. This defaults to /usr/local/bin.
|
||||
|
||||
`datadir' indicates where to put the architecture-independent
|
||||
read-only data files that Emacs refers to while it runs; it
|
||||
defaults to /usr/local/share. We create the following
|
||||
subdirectories under `datadir':
|
||||
- `emacs/VERSION/lisp', containing the Emacs Lisp library, and
|
||||
- `emacs/VERSION/etc', containing the Emacs tutorial, the DOC
|
||||
file, and the `yow' database.
|
||||
`VERSION' is the number of the Emacs version you are installing,
|
||||
like `18.59' or `19.0'. Since these files vary from one version
|
||||
of Emacs to another, including the version number in the path
|
||||
allows you to have several versions of Emacs installed at the
|
||||
same time; this means that you don't have to make Emacs
|
||||
unavailable while installing a new version.
|
||||
|
||||
`libexecdir' indicates where to put architecture-specific data files that
|
||||
Emacs refers to as it runs; it defaults to `/usr/local/libexec'.
|
||||
We create the following subdirectories under `libexecdir':
|
||||
- `emacs/VERSION/CONFIGURATION-NAME', containing executable
|
||||
programs used by Emacs that users are not expected to run
|
||||
themselves.
|
||||
`VERSION' is the number of the Emacs version you are installing,
|
||||
and `CONFIGURATION-NAME' is the argument you gave to the
|
||||
`configure' program to identify the architecture and operating
|
||||
system of your machine, like `mips-dec-ultrix' or
|
||||
`sparc-sun-sunos'. Since these files are specific to the version
|
||||
of Emacs, operating system, and architecture in use, including
|
||||
the configuration name in the path allows you to have several
|
||||
versions of Emacs for any mix of machines and operating systems
|
||||
installed at the same time; this is useful for sites at which
|
||||
different kinds of machines share the file system Emacs is
|
||||
installed on.
|
||||
|
||||
`infodir' indicates where to put the info files distributed with
|
||||
Emacs; it defaults to `/usr/local/info'.
|
||||
|
||||
`mandir' indicates where to put the man pages for Emacs and its
|
||||
utilities (like `etags'); it defaults to
|
||||
`/usr/local/man/man1'.
|
||||
|
||||
`manext' gives the extension the man pages should be installed with.
|
||||
It should contain a period, followed by the appropriate
|
||||
digit. It defaults to `.1'. For example given the default
|
||||
values for `mandir' and `manext', the Emacs man page would be
|
||||
installed as `/usr/local/man/man1/emacs.1'.
|
||||
|
||||
`prefix' doesn't give a path for any specific part of Emacs; instead,
|
||||
its value is used to determine the defaults for all the
|
||||
architecture-independent path variables - `datadir',
|
||||
`sharedstatedir', `infodir', and `mandir'. Its default value is
|
||||
`/usr/local'; the other variables add on `lib' or `man' to it
|
||||
by default.
|
||||
|
||||
For example, suppose your site generally places GNU software
|
||||
under `/usr/users/software/gnusoft' instead of `/usr/local'.
|
||||
By including
|
||||
`prefix=/usr/users/software/gnusoft'
|
||||
in the arguments to `make', you can instruct the build process
|
||||
to place all of the Emacs data files in the appropriate
|
||||
directories under that path.
|
||||
|
||||
`exec_prefix' serves the same purpose as `prefix', but instead
|
||||
determines the default values for the architecture-dependent
|
||||
path variables - `bindir' and `libexecdir'.
|
||||
|
||||
The above variables serve analogous purposes in the makefiles for all
|
||||
GNU software; this variable is specific to Emacs.
|
||||
|
||||
`archlibdir' indicates where Emacs installs and expects the executable
|
||||
files and other architecture-dependent data it uses while
|
||||
running. Its default value, based on `libexecdir' (which
|
||||
see), is `/usr/local/libexec/emacs/VERSION/CONFIGURATION-NAME'
|
||||
(where VERSION and CONFIGURATION-NAME are as described above).
|
||||
|
||||
Remember that you must specify any variable values you need each time
|
||||
you run `make' in the top directory. If you run `make' once to build
|
||||
emacs, test it, and then run `make' again to install the files, you
|
||||
must provide the same variable settings each time. To make the
|
||||
settings persist, you can edit them into the `Makefile' in the top
|
||||
directory, but be aware that running the `configure' program erases
|
||||
`Makefile' and rebuilds it from `Makefile.in'.
|
||||
|
||||
The path for finding Lisp files is specified in src/paths.h,
|
||||
a file which is generated by running configure. To change the path,
|
||||
you can edit the definition of PATH_LOADSEARCH in that file
|
||||
before you run `make'.
|
||||
|
||||
The top-level Makefile stores the variable settings it used in the
|
||||
Makefiles for the subdirectories, so you don't have to specify them
|
||||
when running make in the subdirectories.
|
||||
|
||||
|
||||
CONFIGURATION BY HAND
|
||||
|
||||
Instead of running the `configure' program, you have to perform the
|
||||
following steps.
|
||||
|
||||
1) Copy `./src/config.in' to `./src/config.h'.
|
||||
|
||||
2) Consult `./etc/MACHINES' to see what configuration name you should
|
||||
use for your system. Look at the code of the `configure' script to
|
||||
see which operating system and architecture description files from
|
||||
`src/s' and `src/m' should be used for that configuration name. Edit
|
||||
`src/config.h', and change the two `#include' directives to include
|
||||
the appropriate system and architecture description files.
|
||||
|
||||
2) Edit `./src/config.h' to set the right options for your system. If
|
||||
you need to override any of the definitions in the s/*.h and m/*.h
|
||||
files for your system and machine, do so by editing config.h, not by
|
||||
changing the s/*.h and m/*.h files. Occasionally you may need to
|
||||
redefine parameters used in `./lib-src/movemail.c'.
|
||||
|
||||
3) Create src/Makefile and lib-src/Makefile from the corresponding
|
||||
`Makefile.in' files. First copy `Makefile.in' to `Makefile.c',
|
||||
then edit in appropriate substitutions for the @...@ constructs,
|
||||
and then copy the shell commands near the end of `configure'
|
||||
that run cpp to construct `Makefile'.
|
||||
|
||||
4) Create `Makefile' files in various other directories
|
||||
from the corresponding `Makefile.in' files. This isn't so hard,
|
||||
just a matter of substitution.
|
||||
|
||||
The `configure' script is built from `configure.in' by the `autoconf'
|
||||
program. You need version 2.51 or newer of `autoconf' to rebuild
|
||||
`configure'.
|
||||
|
||||
BUILDING GNU EMACS BY HAND
|
||||
|
||||
Once Emacs is configured, running `make' in the top directory performs
|
||||
the following steps.
|
||||
|
||||
1) Run `make src/paths.h' in the top directory. This produces
|
||||
`./src/paths.h' from the template file `./src/paths.in', changing
|
||||
the paths to the values specified in `./Makefile'.
|
||||
|
||||
2) Go to directory `./lib-src' and run `make'. This creates
|
||||
executables named `ctags' and `etags' and `wakeup' and `make-docfile'
|
||||
and `digest-doc' and `test-distrib'. And others.
|
||||
|
||||
3) Go to directory `./src' and Run `make'. This refers to files in
|
||||
the `./lisp' and `./lib-src' subdirectories using names `../lisp' and
|
||||
`../lib-src'.
|
||||
|
||||
This creates a file `./src/emacs' which is the runnable Emacs,
|
||||
which has another name that contains a version number.
|
||||
Each time you do this, that version number increments in the last place.
|
||||
|
||||
It also creates a file in `./etc' whose name is `DOC' followed by the
|
||||
current Emacs version. This file contains documentation strings for
|
||||
all the functions in Emacs. Each time you run make to make a new
|
||||
emacs, a new DOC file with a new name is made. You must keep the DOC
|
||||
file for an Emacs version as long as you keep using that Emacs
|
||||
version.
|
||||
|
||||
|
||||
INSTALLATION BY HAND
|
||||
|
||||
The steps below are done by running `make install' in the main
|
||||
directory of the Emacs distribution.
|
||||
|
||||
1) Copy `./lisp' and its subdirectories, `./etc', and the executables
|
||||
in `./lib-src' to their final destinations, as selected in `./src/paths.h'.
|
||||
|
||||
Strictly speaking, not all of the executables in `./lib-src' need be copied.
|
||||
- The programs `cvtmail', `fakemail', `hexl',
|
||||
`movemail', `profile', `rcs2log', `timer', `vcdiff', `wakeup',
|
||||
and `yow' are used by Emacs; they do need to be copied.
|
||||
- The programs `etags', `ctags', `emacsclient', `b2m', and `rcs-checkin'
|
||||
are intended to be run by users; they are handled below.
|
||||
- The programs `make-docfile' and `test-distrib' were
|
||||
used in building Emacs, and are not needed any more.
|
||||
- The programs `digest-doc' and `sorted-doc' convert a `DOC' file into
|
||||
a file for users to read. There is no important reason to move them.
|
||||
|
||||
2) Copy the files in `./info' to the place specified in
|
||||
`./lisp/site-init.el' or `./lisp/paths.el'. Note that if the
|
||||
destination directory already contains a file named `dir', you
|
||||
probably don't want to replace it with the `dir' file in the Emacs
|
||||
distribution. Instead, you should make sure that the existing `dir'
|
||||
file contains an appropriate menu entry for the Emacs info.
|
||||
|
||||
3) Copy `./src/emacs' to `/usr/local/bin', or to some other directory
|
||||
in users' search paths. `./src/emacs' has an alternate name
|
||||
`./src/emacs-EMACSVERSION'; you may wish to make a symbolic link named
|
||||
`/usr/local/bin/emacs' pointing to that alternate name, as an easy way
|
||||
of installing different versions.
|
||||
|
||||
You can delete `./src/temacs'.
|
||||
|
||||
4) Copy the programs `b2m', `emacsclient', `ctags', `etags', and
|
||||
`rcs-checkin' from `./lib-src' to `/usr/local/bin'. These programs are
|
||||
intended for users to run.
|
||||
|
||||
5) Copy the man pages in `./etc' for emacs, ctags, and etags into the
|
||||
appropriate man directories.
|
||||
|
||||
6) The files in the `./src' subdirectory, except for `emacs', are not
|
||||
used by Emacs once it is built. However, it is very desirable to keep
|
||||
the source on line for debugging.
|
||||
|
||||
|
||||
PROBLEMS
|
||||
|
||||
See the file PROBLEMS in etc subdirectory for a list of various
|
||||
problems sometimes encountered, and what to do about them.
|
||||
|
||||
|
||||
Installation on MSDOG (a.k.a. MSDOS)
|
||||
|
||||
To install on MSDOG, you need to have the GNU C compiler for MSDOG
|
||||
(also known as djgpp), GNU Make, rm, mv, and sed. See the remarks in
|
||||
config.bat for more information about locations and versions. The
|
||||
file etc/FAQ includes pointers to Internet sites where you can find
|
||||
the necessary utilities; search for "MS-DOS". The configuration step
|
||||
(see below) will test for these utilities and will refuse to continue
|
||||
if any of them isn't found.
|
||||
|
||||
Recompiling Lisp files in the `lisp' subdirectory using the various
|
||||
targets in the lisp/Makefile file requires additional utilities:
|
||||
`find' and `xargs' (from Findutils), `touch' (from Fileutils) GNU
|
||||
`echo' and `test' (from Sh-utils), `tr, `sort', and `uniq' (from
|
||||
Textutils), and a port of Bash. However, you should not normally need
|
||||
to run lisp/Makefile, as all the Lisp files are distributed in
|
||||
byte-compiled form as well.
|
||||
|
||||
If you are building the MSDOG version of Emacs on an MSDOG-like system
|
||||
which supports long file names (e.g. Windows 95), you need to make
|
||||
sure that long file names are handled consistently both when you
|
||||
unpack the distribution and compile it. If you intend to compile with
|
||||
DJGPP v2.0 or later, and long file names support is enabled (LFN=y in
|
||||
the environment), you need to unpack Emacs distribution in a way that
|
||||
doesn't truncate the original long filenames to the DOS 8.3 namespace;
|
||||
the easiest way to do this is to use djtar program which comes with
|
||||
DJGPP, since it will note the LFN setting and behave accordingly.
|
||||
DJGPP v1 doesn't support long filenames, so you must unpack Emacs with
|
||||
a program that truncates the filenames to 8.3 naming as it extracts
|
||||
files; again, using djtar after setting LFN=n is the recommended way.
|
||||
You can build Emacs with LFN=n even if you use DJGPP v2, if some of
|
||||
your tools don't support long file names: just ensure that LFN is set
|
||||
to `n' during both unpacking and compiling.
|
||||
|
||||
(By the time you read this, you have already unpacked the Emacs
|
||||
distribution, but if the explanations above imply that you should have
|
||||
done it differently, it's safer to delete the directory tree created
|
||||
by the unpacking program and unpack Emacs again, than to risk running
|
||||
into problems during the build process.)
|
||||
|
||||
It is important to understand that the runtime support of long file
|
||||
names by the Emacs binary is NOT affected by the LFN setting during
|
||||
compilation; Emacs compiled with DJGPP v2.0 or later will always
|
||||
support long file names on Windows 9X no matter what was the setting
|
||||
of LFN at compile time. However, if you compiled with LFN disabled
|
||||
and want to enable LFN support after Emacs was already built, you need
|
||||
to make sure that the support files in the lisp, etc and info
|
||||
directories are called by their original long names as found in the
|
||||
distribution. You can do this either by renaming the files manually,
|
||||
or by extracting them from the original distribution archive with
|
||||
djtar after you set LFN=y in the environment.
|
||||
|
||||
To unpack Emacs with djtar, type this command:
|
||||
|
||||
djtar -x emacs.tgz
|
||||
|
||||
(This assumes that the Emacs distribution is called `emacs.tgz' on
|
||||
your system.)
|
||||
|
||||
If you want to print international characters, install the intlfonts
|
||||
distribution. For this, create a directory called `fonts' under the
|
||||
Emacs top-level directory (usually called `emacs-XX.YY') created by
|
||||
unpacking emacs.tgz, chdir into the directory emacs-XX.YY/fonts, and
|
||||
type this:
|
||||
|
||||
djtar -x intlfonts.tgz
|
||||
|
||||
When unpacking is done, a directory called `emacs-XX.YY' will be
|
||||
created, where XX.YY is the Emacs version. To build and install
|
||||
Emacs, chdir to that directory and type these commands:
|
||||
|
||||
config msdos
|
||||
make install
|
||||
|
||||
Running "config msdos" checks for several programs that are required
|
||||
to configure and build Emacs; if one of those programs is not found,
|
||||
CONFIG.BAT stops and prints an error message. If you have DJGPP
|
||||
version 2.0 or 2.01, it will complain about a program called
|
||||
DJECHO.EXE. These old versions of DJGPP shipped that program under
|
||||
the name ECHO.EXE, so you can simply copy ECHO.EXE to DJECHO.EXE and
|
||||
rerun CONFIG.BAT. If you have neither ECHO.EXE nor DJECHO.EXE, you
|
||||
should be able to find them in your djdevNNN.zip archive (where NNN is
|
||||
the DJGPP version number).
|
||||
|
||||
On Windows NT or Windows 2000, running "config msdos" might print an
|
||||
error message like "VDM has been already loaded". This is because
|
||||
those systems have a program called `redir.exe' which is incompatible
|
||||
with a program by the same name supplied with DJGPP, which is used by
|
||||
config.bat. To resolve this, move the DJGPP's `bin' subdirectory to
|
||||
the front of your PATH environment variable.
|
||||
|
||||
To install the international fonts, chdir to the intlfonts-X.Y
|
||||
directory created when you unpacked the intlfonts distribution (X.Y is
|
||||
the version number of the fonts' distribution), and type the following
|
||||
command:
|
||||
|
||||
make bdf INSTALLDIR=..
|
||||
|
||||
After Make finishes, you may remove the directory intlfonts-X.Y; the
|
||||
fonts are installed into the fonts/bdf subdirectory of the top-level
|
||||
Emacs directory, and that is where Emacs will look for them by
|
||||
default.
|
||||
|
||||
Building Emacs creates executable files in the src and lib-src
|
||||
directories. Installing Emacs on MSDOS moves these executables to a
|
||||
sibling directory called bin. For example, if you build in directory
|
||||
/emacs, installing moves the executables from /emacs/src and
|
||||
/emacs/lib-src to the directory /emacs/bin, so you can then delete the
|
||||
subdirectories /emacs/src and /emacs/lib-src if you wish. The only
|
||||
subdirectories you need to keep are bin, lisp, etc and info. (If you
|
||||
installed intlfonts, keep the fonts directory and all its
|
||||
subdirectories as well.) The bin subdirectory should be added to your
|
||||
PATH. The msdos subdirectory includes a PIF and an icon file for
|
||||
Emacs which you might find useful if you run Emacs under MS Windows.
|
||||
|
||||
Emacs on MSDOS finds the lisp, etc and info directories by looking in
|
||||
../lisp, ../etc and ../info, starting from the directory where the
|
||||
Emacs executable was run from. You can override this by setting the
|
||||
environment variables EMACSDATA (for the location of `etc' directory),
|
||||
EMACSLOADPATH (for the location of `lisp' directory) and INFOPATH (for
|
||||
the location of the `info' directory).
|
||||
|
||||
MSDOG is a not a multitasking operating system, so Emacs features such
|
||||
as asynchronous subprocesses that depend on multitasking will not
|
||||
work. Synchronous subprocesses do work.
|
||||
|
||||
Version 2.0 of djgpp has two bugs that affect Emacs. We've included
|
||||
corrected versions of two files from djgpp in the msdos subdirectory:
|
||||
is_exec.c and sigaction.c. To work around the bugs, compile these
|
||||
files and link them into temacs. Djgpp versions 2.01 and later have
|
||||
these bugs fixed, so upgrade if you can before building Emacs.
|
||||
|
||||
COPYING PERMISSIONS
|
||||
|
||||
Permission is granted to anyone to make or distribute verbatim copies
|
||||
of this document as received, in any medium, provided that the
|
||||
copyright notice and permission notice are preserved,
|
||||
and that the distributor grants the recipient permission
|
||||
for further redistribution as permitted by this notice.
|
||||
|
||||
Permission is granted to distribute modified versions
|
||||
of this document, or of portions of it,
|
||||
under the above conditions, provided also that they
|
||||
carry prominent notices stating who last changed them,
|
||||
and that any new or changed statements about the activities
|
||||
of the Free Software Foundation are approved by the Foundation.
|
||||
78
INSTALL.CVS
78
INSTALL.CVS
|
|
@ -1,78 +0,0 @@
|
|||
Building and Installing Emacs from CVS
|
||||
|
||||
Some of the files that are included in the Emacs tarball, such as
|
||||
byte-compiled Lisp files, are not stored in the CVS repository.
|
||||
Therefore, to build from CVS you must run "make bootstrap"
|
||||
instead of just "make":
|
||||
|
||||
$ ./configure
|
||||
$ make bootstrap
|
||||
|
||||
The bootstrap process makes sure all necessary files are rebuilt
|
||||
before it builds the final Emacs binary.
|
||||
|
||||
Normally, it is not necessary to use "make bootstrap" after every CVS
|
||||
update. Unless there are problems, we suggest the following
|
||||
procedure:
|
||||
|
||||
$ ./configure
|
||||
$ make
|
||||
$ cd lisp
|
||||
$ make recompile EMACS=../src/emacs
|
||||
$ cd ..
|
||||
$ make
|
||||
|
||||
(If you want to install the Emacs binary, type "make install" instead
|
||||
of "make" in the last command.)
|
||||
|
||||
Occasionally the file "lisp/loaddefs.el" will need be updated to
|
||||
reflect new autoloaded functions. If you see errors about undefined
|
||||
lisp functions during compilation, that may be the reason. Another
|
||||
symptom may be an error saying that "loaddefs.el" could not be found;
|
||||
this is due to a change in the way loaddefs.el was handled in CVS, and
|
||||
should only happen once, for users that are updating old CVS trees.
|
||||
|
||||
To update loaddefs.el, do:
|
||||
|
||||
$ cd lisp
|
||||
$ make autoloads EMACS=../src/emacs
|
||||
|
||||
If either of 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 have
|
||||
also been rumored to have happened.
|
||||
|
||||
To fix the problem, save the following script into a file, make it
|
||||
executable, and set CVS_RSH to the file name of the script:
|
||||
|
||||
#!/bin/bash
|
||||
exec 2> >(exec cat >&2 2>/dev/null)
|
||||
exec ssh "$@"
|
||||
|
||||
This may be combined with the following entry in ~/.ssh/config to
|
||||
simplify accessing the CVS repository:
|
||||
|
||||
Host subversions.gnu.org
|
||||
Protocol 2
|
||||
ForwardX11 no
|
||||
User YOUR_USERID
|
||||
223
MAINTAINERS
223
MAINTAINERS
|
|
@ -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
|
||||
804
Makefile.in
804
Makefile.in
|
|
@ -1,804 +0,0 @@
|
|||
# DIST: This is the distribution Makefile for Emacs. configure can
|
||||
# DIST: make most of the changes to this file you might want, so try
|
||||
# DIST: that first.
|
||||
|
||||
# Copyright (C) 1992,93,94,95,96,97,98,1999,2000,01,02,03,04,2005,2006
|
||||
# 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@
|
||||
|
||||
# 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 build before leim.
|
||||
# "export PARALLEL=0" is for SGI's Make, to prevent it from
|
||||
# running more than 1 process in the leim directory, especially for
|
||||
# the $TIT files there.
|
||||
leim: src ${SUBDIR_MAKEFILES} FRC
|
||||
(export PARALLEL; PARALLEL=0; cd $@; $(MAKE) all $(MFLAGS) \
|
||||
CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
|
||||
LDFLAGS='${LDFLAGS}' MAKE='${MAKE}')
|
||||
|
||||
src: lib-src FRC
|
||||
|
||||
lib-src: FRC src/config.stamp
|
||||
|
||||
.RECURSIVE: ${SUBDIR} leim
|
||||
|
||||
${SUBDIR}: maybe_bootstrap ${SUBDIR_MAKEFILES} FRC
|
||||
cd $@; $(MAKE) all $(MFLAGS) \
|
||||
CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
|
||||
LDFLAGS='${LDFLAGS}' MAKE='${MAKE}'
|
||||
|
||||
blessmail: ${SUBDIR_MAKEFILES} src FRC
|
||||
cd lib-src; $(MAKE) maybe-blessmail $(MFLAGS) \
|
||||
MAKE='${MAKE}' archlibdir='$(archlibdir)'
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in config.status
|
||||
./config.status
|
||||
|
||||
config.status: ${srcdir}/configure
|
||||
./config.status --recheck
|
||||
|
||||
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.
|
||||
|
||||
## 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 ${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)
|
||||
|
||||
### Used for `bootfast' to avoid deleting existing dumped Emacs executables
|
||||
### and compiled .elc files.
|
||||
bootstrap-clean-before-fast: FRC
|
||||
(cd src; $(MAKE) $(MFLAGS) mostlyclean)
|
||||
(cd oldXMenu; $(MAKE) $(MFLAGS) clean)
|
||||
(cd lwlib; $(MAKE) $(MFLAGS) clean)
|
||||
(cd lib-src; $(MAKE) $(MFLAGS) clean)
|
||||
-(cd man && $(MAKE) $(MFLAGS) clean)
|
||||
-(cd lispref && $(MAKE) $(MFLAGS) clean)
|
||||
-(cd lispintro && $(MAKE) $(MFLAGS) clean)
|
||||
(cd leim; $(MAKE) $(MFLAGS) clean)
|
||||
105
README
105
README
|
|
@ -1,105 +0,0 @@
|
|||
This directory tree holds version 22.0.50 of GNU Emacs, the extensible,
|
||||
customizable, self-documenting real-time display editor.
|
||||
|
||||
You may encounter bugs in this release. If you do, please report
|
||||
them; your bug reports are valuable contributions to the FSF, since
|
||||
they allow us to notice and fix problems on machines we don't have, or
|
||||
in code we don't use often. See the file BUGS for more information on
|
||||
how to report bugs.
|
||||
|
||||
See the file etc/NEWS for information on new features and other
|
||||
user-visible changes in recent versions of Emacs.
|
||||
|
||||
The file INSTALL in this directory says how to bring up GNU Emacs on
|
||||
various systems, once you have loaded the entire subtree of this
|
||||
directory.
|
||||
|
||||
The file etc/PROBLEMS contains information on many common problems that
|
||||
occur in building, installing and running Emacs.
|
||||
|
||||
Reports of bugs in Emacs should be sent to the mailing list
|
||||
bug-gnu-emacs@gnu.org. See the "Bugs" section of the Emacs
|
||||
manual for more information on how to report bugs. (The file `BUGS'
|
||||
in this directory explains how you can find and read that section
|
||||
using the Info files that come with Emacs.) See `etc/MAILINGLISTS'
|
||||
for more information on mailing lists relating to GNU packages.
|
||||
|
||||
The `etc' subdirectory contains several other files, named in capital
|
||||
letters, which you might consider looking at when installing GNU
|
||||
Emacs.
|
||||
|
||||
The file `configure' is a shell script to acclimate Emacs to the
|
||||
oddities of your processor and operating system. It creates the file
|
||||
`Makefile' (a script for the `make' program), which automates the
|
||||
process of building and installing Emacs. See INSTALL for more
|
||||
detailed information.
|
||||
|
||||
The file `configure.in' is the input used by the autoconf program to
|
||||
construct the `configure' script. Since Emacs has some configuration
|
||||
requirements that autoconf can't meet directly, and for historical
|
||||
reasons, `configure.in' uses an unholy marriage of custom-baked
|
||||
configuration code and autoconf macros. If you want to rebuild
|
||||
`configure' from `configure.in', you will need to install a recent
|
||||
version of autoconf and GNU m4.
|
||||
|
||||
The file `Makefile.in' is a template used by `configure' to create
|
||||
`Makefile'.
|
||||
|
||||
The file `make-dist' is a shell script to build a distribution tar
|
||||
file from the current Emacs tree, containing only those files
|
||||
appropriate for distribution. If you make extensive changes to Emacs,
|
||||
this script will help you distribute your version to others.
|
||||
|
||||
There are several subdirectories:
|
||||
|
||||
`src' holds the C code for Emacs (the Emacs Lisp interpreter and
|
||||
its primitives, the redisplay code, and some basic editing
|
||||
functions).
|
||||
`lisp' holds the Emacs Lisp code for Emacs (most everything else).
|
||||
`leim' holds the library of Emacs input methods, Lisp code and
|
||||
auxiliary data files required to type international characters
|
||||
which can't be directly produced by your keyboard.
|
||||
`lib-src' holds the source code for some utility programs for use by or
|
||||
with Emacs, like movemail and etags.
|
||||
`etc' holds miscellaneous architecture-independent data files
|
||||
Emacs uses, like the tutorial text and the Zippy the Pinhead
|
||||
quote database. The contents of the `lisp', `leim', `info',
|
||||
`man', `lispref', and `lispintro' subdirectories are
|
||||
architecture-independent too.
|
||||
`info' holds the Info documentation tree for Emacs.
|
||||
`man' holds the source code for the Emacs Manual. If you modify the
|
||||
manual sources, you will need the `makeinfo' program to produce
|
||||
an updated manual. `makeinfo' is part of the GNU Texinfo
|
||||
package; you need version 4.2 or later of Texinfo.
|
||||
`lispref' holds the source code for the Emacs Lisp reference manual.
|
||||
`lispintro' holds the source code for the Introduction to Programming
|
||||
in Emacs Lisp manual.
|
||||
|
||||
`msdos' holds configuration files for compiling Emacs under MSDOG.
|
||||
`vms' holds instructions and useful files for running Emacs under VMS.
|
||||
`nt' holds various command files and documentation files that pertain
|
||||
to building and running Emacs on Windows 9X/ME/NT/2000/XP.
|
||||
`mac' holds instructions, sources, and other useful files for building
|
||||
and running Emacs on the Mac.
|
||||
|
||||
Building Emacs on non-Posix platforms requires to install tools
|
||||
that aren't part of the standard distribution of the OS. The
|
||||
platform-specific README files and installation instructions should
|
||||
list the required tools.
|
||||
|
||||
VMS info:
|
||||
|
||||
Emacs 19.x and above do not compile out of the box on OpenVMS.
|
||||
Richard Levitte <levitte@lp.se> is distributing and maintaining a
|
||||
version of Emacs (currently based on version 19.28, but soon moving to
|
||||
19.34 and then 20.1) that compiles and works on OpenVMS 5.5 and above
|
||||
on both VAX and Alpha architectures. For more information see
|
||||
|
||||
http://www.lp.se/gnu-vms/software/released1/emacs.html
|
||||
|
||||
There is also some effort going on with Emacs 21. Source code is
|
||||
available at ftp://ftp.nvg.ntnu.no/pub/vms/emacs/. Look for most
|
||||
recent stuff with ls -lta.
|
||||
|
||||
It is a working "development" version (editing and much more works).
|
||||
More developers are needed; contact roart@nvg.ntnu.no.
|
||||
371
admin/ChangeLog
371
admin/ChangeLog
|
|
@ -1,371 +0,0 @@
|
|||
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
|
||||
;; End:
|
||||
|
||||
Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted provided the copyright notice and this notice are preserved.
|
||||
|
||||
;;; arch-tag: 97728c77-77c0-4156-b669-0e8c07d94e5a
|
||||
|
|
@ -1,161 +0,0 @@
|
|||
Tasks needed before the next release.
|
||||
|
||||
* TO BE DONE SHORTLY BEFORE RELEASE
|
||||
|
||||
** `undo-ask-before-discard', currently set to t for debugging purposes
|
||||
has to be set to nil: when t, it can leak memory and cause other problems.
|
||||
|
||||
** Update release dates of manuals.
|
||||
|
||||
** Get rid of overfull and underfull boxes in manuals.
|
||||
|
||||
** Check for widow and orphan lines in manuals;
|
||||
make sure all the pages really look ok in the manual as formatted.
|
||||
|
||||
** Update AUTHORS.
|
||||
|
||||
** 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 No response
|
||||
de Sven Joachim Done
|
||||
fr Eric Jacoboni Done (layout might be improved)
|
||||
pl Włodek Bzyl Done
|
||||
pt-br Rodrigo Real Done
|
||||
ru Alex Ott Working
|
||||
sk Miroslav Vaško No response
|
||||
|
||||
Reminders sent out on 2006-06-08.
|
||||
|
||||
** Send an email to the various distributions, including the GNOME
|
||||
and KDE projects, to use the new Emacs icons in etc/images/icons.
|
||||
|
||||
* BUGS
|
||||
|
||||
** Markus Gritsch's report about Emacs looping on Windoze with the following
|
||||
.emacs file, and then reduce Emacs frame width to "something quite narrow":
|
||||
(setq-default truncate-lines t)
|
||||
(custom-set-variables
|
||||
'(hscroll-margin 20)
|
||||
'(hscroll-step 1)
|
||||
)
|
||||
|
||||
** TCP server processes do not work on Windows.
|
||||
|
||||
TCP/IP server processes created with `make-network-process' consume
|
||||
excesive CPU on some Windows environments. Usages of 50% and 100%
|
||||
CPU time have been observed on different Window XP configurations.
|
||||
Seems to be a problem in sys_select in w32proc.c.
|
||||
|
||||
In its current form, it sys_select says the socket is ready, so we
|
||||
call server_accept_connection which again calls accept() which returns
|
||||
-1 with errno == WSAEWOULDBLOCK (10035) indicating that there is no
|
||||
pending connection to accept.
|
||||
|
||||
It seems that to fix this, w32 server sockets must use WSAAsyncSelect
|
||||
+ FD_ACCEPT to request notifications of incoming connections...
|
||||
|
||||
|
||||
* DOCUMENTATION
|
||||
|
||||
** Check the Emacs Lisp manual.
|
||||
|
||||
Each manual section should be checked for factual correctness
|
||||
regarding recent changes by at least two people. After each file
|
||||
name, on the same line or the following line, come the names of the
|
||||
people who have checked it.
|
||||
|
||||
SECTION READERS
|
||||
----------------------------------
|
||||
lispref/abbrevs.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/advice.texi joakim@verona.se Chong Yidong
|
||||
lispref/anti.texi Chong Yidong
|
||||
lispref/backups.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/buffers.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/calendar.texi Joakim Verona <joakim@verona.se> Chong Yidong
|
||||
lispref/commands.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/compile.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/control.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/customize.texi Chong Yidong "Luc Teirlinck"
|
||||
lispref/debugging.texi Joakim Verona <joakim@verona.se> Lute Kamstra
|
||||
lispref/display.texi Chong Yidong Jason Rumney
|
||||
lispref/edebug.texi Chong Yidong "Luc Teirlinck"
|
||||
lispref/elisp.texi "Luc Teirlinck" Lute Kamstra
|
||||
lispref/errors.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/eval.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/files.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/frames.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/functions.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/hash.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/help.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/hooks.texi Lute Kamstra Chong Yidong
|
||||
lispref/internals.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/intro.texi "Luc Teirlinck" Josh Varner
|
||||
lispref/keymaps.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/lists.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/loading.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/locals.texi Chong Yidong Nick Roberts
|
||||
lispref/macros.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/maps.texi Chong Yidong
|
||||
lispref/markers.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/minibuf.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/modes.texi Chong Yidong
|
||||
lispref/nonascii.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/numbers.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/objects.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/os.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/positions.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/processes.texi Chong Yidong ttn
|
||||
lispref/searching.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/sequences.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/streams.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/strings.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/symbols.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/syntax.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/text.texi Chong Yidong
|
||||
lispref/tips.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/variables.texi "Luc Teirlinck" Chong Yidong
|
||||
lispref/windows.texi "Luc Teirlinck" Chong Yidong
|
||||
|
||||
** Check the Emacs Tutorial.
|
||||
|
||||
The first line of every tutorial must begin with text ending in a period
|
||||
(".", ASCII 0x2E) saying "Emacs Tutorial" in the respective language.
|
||||
This should be followed by "See end for copying conditions", likewise
|
||||
in the respective language.
|
||||
|
||||
After each file name, on the same line or the following line, come the
|
||||
names of the people who have checked it.
|
||||
|
||||
SECTION READERS
|
||||
----------------------------------
|
||||
etc/TUTORIAL rms
|
||||
etc/TUTORIAL.bg Ognyan Kulev <ogi@fmi.uni-sofia.bg>
|
||||
etc/TUTORIAL.cn
|
||||
etc/TUTORIAL.cs Pavel Janík <Pavel@Janik.cz>
|
||||
etc/TUTORIAL.de Werner LEMBERG <wl@gnu.org>
|
||||
etc/TUTORIAL.es Marcelo Toledo
|
||||
etc/TUTORIAL.fr 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:
|
||||
71
admin/README
71
admin/README
|
|
@ -1,71 +0,0 @@
|
|||
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.
|
||||
|
||||
|
||||
|
||||
|
||||
Local variables:
|
||||
mode: outline
|
||||
paragraph-separate: "[ ]*$"
|
||||
end:
|
||||
|
||||
# arch-tag: 812b9461-bc0a-46a7-925e-24bd41118463
|
||||
122
admin/admin.el
122
admin/admin.el
|
|
@ -1,122 +0,0 @@
|
|||
;;; admin.el --- utilities for Emacs administration
|
||||
|
||||
;; Copyright (C) 2001, 2005 Free Software Foundation, Inc.
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation; either version 2, or (at your option)
|
||||
;; any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs; see the file COPYING. If not, write to the
|
||||
;; Free Software Foundation, Inc., 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."))))))
|
||||
;; 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\"")))))
|
||||
|
||||
;;; arch-tag: 4ea83636-2293-408b-884e-ad64f22a3bf5
|
||||
;; admin.el ends here.
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
/* Allocate X colors. Used for testing with dense colormaps.
|
||||
Copyright (C) 2001, 2006 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) */
|
||||
|
|
@ -1,101 +0,0 @@
|
|||
#! /usr/bin/perl
|
||||
|
||||
# Copyright (C) 2001, 2006 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
|
||||
|
|
@ -1,301 +0,0 @@
|
|||
: #-*- Perl -*-
|
||||
eval 'exec perl -w -S $0 ${1+"$@"}' # Portability kludge
|
||||
if 0; # Author: Martin Buchholz
|
||||
|
||||
use strict;
|
||||
use POSIX;
|
||||
|
||||
(my $myName = $0) =~ s@.*/@@; my $usage="
|
||||
Usage: $myName
|
||||
|
||||
Finds DOCSTRING arg mismatches between
|
||||
formal parameters, docstrings, and lispref texi.
|
||||
|
||||
This program is in the public domain.\n";
|
||||
|
||||
die $usage if @ARGV;
|
||||
die $usage unless -r "src/alloc.c" && -d "CVS" && -d "lisp";
|
||||
|
||||
my %texi_funtype;
|
||||
my %texi_arglist;
|
||||
|
||||
my %code_funtype;
|
||||
my %code_arglist;
|
||||
|
||||
sub FileContents {
|
||||
local $/ = undef;
|
||||
open (FILE, "< $_[0]") or die "$_[0]: $!";
|
||||
return scalar <FILE>;
|
||||
}
|
||||
|
||||
sub Show_details {
|
||||
my ($show_details, $function, $parms, $docstring) = @_;
|
||||
if ($show_details) {
|
||||
print "function = $function $parms\n$docstring\n", "-" x 70, "\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub Check_texi_function {
|
||||
my ($function, $funtype, $docstring, @parms) = @_;
|
||||
my %docstring_parm;
|
||||
my %docstring_word;
|
||||
my %arglist_parm;
|
||||
my $show_details = 0;
|
||||
|
||||
if (exists $texi_funtype{$function}) {
|
||||
print "duplicate texidoc: $function @parms\n";
|
||||
return; # later definition likely bogus package def
|
||||
}
|
||||
|
||||
$texi_funtype{$function} = $funtype;
|
||||
$texi_arglist{$function} = "@parms";
|
||||
|
||||
foreach my $parm (@parms) {
|
||||
next if $parm eq '&optional' || $parm eq '&rest';
|
||||
$arglist_parm{$parm} = 1;
|
||||
}
|
||||
|
||||
foreach my $parm ($docstring =~ /\@var{([^{}]+)}/g) {
|
||||
$docstring_parm{$parm} = 1;
|
||||
}
|
||||
|
||||
foreach my $hit ($docstring =~ /[^\`]\`[A-Za-z-]+\'/g)
|
||||
{
|
||||
print "texi \@code missing: $function: $hit\n";
|
||||
$show_details = 1;
|
||||
}
|
||||
|
||||
# (my $raw_docstring = $docstring) =~ s/\@var{[^{}]+}//g;
|
||||
# $raw_docstring =~ s/[^a-zA-Z_-]+/ /g;
|
||||
# foreach my $word (split (' ', $raw_docstring)) {
|
||||
# if ($word =~ /^[A-Z][A-Z-]+$/) {
|
||||
# print "Missing \@var: $function: $word\n";
|
||||
# }
|
||||
# }
|
||||
|
||||
foreach my $parm (keys %docstring_parm) {
|
||||
if (! exists $arglist_parm{$parm}) {
|
||||
print "bogus texi parm: $function: $parm\n";
|
||||
$show_details = 1;
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $parm (keys %arglist_parm) {
|
||||
if (! exists $docstring_parm{$parm}) {
|
||||
print "undocumented texi parm: $function: $parm\n";
|
||||
$show_details = 1;
|
||||
}
|
||||
}
|
||||
|
||||
Show_details $show_details, $function, "@parms", $docstring;
|
||||
}
|
||||
|
||||
sub Check_function {
|
||||
my ($function, $funtype, $docstring, @parms) = @_;
|
||||
my %docstring_parm;
|
||||
my %arglist_parm;
|
||||
my $show_details = 0;
|
||||
|
||||
if (exists $code_funtype{$function}) {
|
||||
print "duplicate codedef: $function @parms\n";
|
||||
return; # later definition likely bogus package def
|
||||
}
|
||||
|
||||
$code_funtype{$function} = $funtype;
|
||||
$code_arglist{$function} = "@parms";
|
||||
#foreach my $parm ($parms =~ /\b[a-z0-9-]{3,}\b/g) {
|
||||
# $arglist_parm{$parm} = 1;
|
||||
#}
|
||||
foreach my $parm (@parms) {
|
||||
next if $parm eq '&optional' || $parm eq '&rest';
|
||||
$arglist_parm{$parm} = 1;
|
||||
}
|
||||
my $doc_tmp = $docstring;
|
||||
$doc_tmp =~ s/[^A-Za-z0-9_-]/ /g;
|
||||
foreach my $parm (split (' ', $doc_tmp)) {
|
||||
if ($parm =~ /^[A-Z][A-Z0-9-]*$/) {
|
||||
next if $parm =~ /I18N/;
|
||||
next if $parm =~ /M17N/;
|
||||
$parm =~ tr[A-Z][a-z];
|
||||
$docstring_parm{$parm} = 1;
|
||||
}
|
||||
}
|
||||
# foreach my $parm ($docstring =~ /\b[A-Z0-9-]{1,}\b/g) {
|
||||
# next if $parm =~ /-$/;
|
||||
# $parm =~ tr[A-Z][a-z];
|
||||
# $docstring_parm{$parm} = 1;
|
||||
# }
|
||||
foreach my $parm (keys %docstring_parm) {
|
||||
next if $parm eq 'tty';
|
||||
next if $parm eq 'fsf';
|
||||
next if $parm eq 'note';
|
||||
next if $parm eq 'warning';
|
||||
next if $parm eq 'bug';
|
||||
next if $parm eq 'ascii';
|
||||
next if $parm eq 'iso';
|
||||
next if $parm eq 'and';
|
||||
next if $parm eq 'absolutely';
|
||||
next if $parm eq 'doc';
|
||||
next if $parm eq 'user';
|
||||
next if $parm eq 'not';
|
||||
next if $parm eq 'must';
|
||||
next if $parm eq 'nil';
|
||||
next if $parm eq 'esc';
|
||||
next if $parm eq 'lfd';
|
||||
next if $parm eq 'gpm';
|
||||
next if $parm eq 'primary';
|
||||
next if $parm eq 'secondary';
|
||||
next if $parm eq 'clipboard';
|
||||
next if length $parm < 3;
|
||||
if (! exists $arglist_parm{$parm}) {
|
||||
print "bogus parm: $function: $parm\n";
|
||||
$show_details = 1;
|
||||
}
|
||||
}
|
||||
foreach my $parm (keys %arglist_parm) {
|
||||
if (! exists $docstring_parm{$parm}) {
|
||||
print "Undocumented parm: $function: $parm\n";
|
||||
$show_details = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ($docstring !~ /[\]}!\)\.]\s*\Z/m &&
|
||||
$docstring =~ /\S/ &&
|
||||
$docstring !~ /Keywords supported/)
|
||||
{
|
||||
print "Missing trailing period: $function\n";
|
||||
$show_details = 1;
|
||||
}
|
||||
|
||||
if (exists $texi_arglist{$function}
|
||||
and "@parms" ne $texi_arglist{$function}
|
||||
and not ("@parms" eq 'int nargs Lisp-Object *args'
|
||||
&& $texi_arglist{$function} =~ /&rest/)) {
|
||||
my @texi_parms = split (' ', $texi_arglist{$function});
|
||||
my @a = ("@parms" =~ /&optional/g);
|
||||
my @b = ("@parms" =~ /&rest/g);
|
||||
my @c = ("@texi_parms" =~ /&optional/g);
|
||||
my @d = ("@texi_parms" =~ /&rest/g);
|
||||
if (@parms != @texi_parms
|
||||
|| (@a != @c) || (@b != @d)) {
|
||||
print "serious mismatch: $function: @parms --- @texi_parms\n";
|
||||
} else {
|
||||
print "texi mismatch: $function: @parms --- $texi_arglist{$function}\n";
|
||||
}
|
||||
$show_details = 1;
|
||||
}
|
||||
|
||||
if (exists $texi_funtype{$function}
|
||||
&& $texi_funtype{$function} ne $funtype) {
|
||||
print "interactiveness mismatch: $function: $funtype --- $texi_funtype{$function}\n";
|
||||
$show_details = 1;
|
||||
}
|
||||
|
||||
Show_details $show_details, $function, "@parms", $docstring;
|
||||
}
|
||||
|
||||
my $lisprefdir;
|
||||
if (-d "man/lispref") { $lisprefdir = "man/lispref"; }
|
||||
elsif (-d "lispref") { $lisprefdir = "lispref"; }
|
||||
else { die "Can't find lispref texi directory.\n"; }
|
||||
|
||||
open (FIND, "find $lisprefdir -name '*.texi' -print |") or die;
|
||||
while (my $file = <FIND>) {
|
||||
my @matches = ((FileContents $file) =~
|
||||
/\@(def(?:fn|un))([^\n]+)\n(.*?)\n\@end def(?:un|fn)/sgo);
|
||||
# /^\@(def(?:un|fn))\s+(.*)\n([.|\n]*?)^\@end def(?:un|fn)\n/mgo);
|
||||
while (@matches) {
|
||||
my ($defform, $defn, $docstring) = splice (@matches, 0, 3);
|
||||
#print "defform = $defform\n";
|
||||
#print "defn = $defn\n";
|
||||
#print "docstring = $docstring\n";
|
||||
my ($function, @parms, $funtype);
|
||||
if ($defform eq 'defun') {
|
||||
($funtype, $function, @parms) = ('Function', split (' ', $defn));
|
||||
} else {
|
||||
die unless $defform eq 'deffn';
|
||||
($funtype, $function, @parms) = split (' ', $defn);
|
||||
}
|
||||
next if $funtype eq '{Syntax' or $funtype eq '{Prefix';
|
||||
|
||||
Check_texi_function $function, $funtype, $docstring, @parms;
|
||||
}
|
||||
}
|
||||
|
||||
open (FIND, "find src -name '*.c' -print |") or die;
|
||||
while (my $file = <FIND>) {
|
||||
my @matches =
|
||||
((FileContents $file) =~
|
||||
/\bDEFUN\s*\(\s*\"((?:[^\\\"]|\\.)+)\"\s*,\s*\S+\s*,\s*(\S+)\s*,\s*(\S+)\s*,\s*((?:0|\"(?:(?:[^\\\"]|\\.)*)\"))\s*,\s*\/\*(.*?)\*\/\s*\(([^()]*)\)\)/sgo);
|
||||
while (@matches) {
|
||||
my ($function, $minargs, $maxargs, $interactive, $docstring, $parms) = splice (@matches, 0, 6);
|
||||
$docstring =~ s/^\n+//s;
|
||||
$docstring =~ s/\n+$//s;
|
||||
$parms =~ s/,/ /g;
|
||||
my @parms = split (' ',$parms);
|
||||
for (@parms) { tr/_/-/; s/-$//; }
|
||||
if ($parms !~ /Lisp_Object/) {
|
||||
if ($minargs < @parms) {
|
||||
if ($maxargs =~ /^\d+$/) {
|
||||
die unless $maxargs eq @parms;
|
||||
splice (@parms, $minargs, 0, '&optional');
|
||||
}
|
||||
}
|
||||
}
|
||||
my $funtype = ($interactive =~ /\"/ ? 'Command' : 'Function');
|
||||
Check_function $function, $funtype, $docstring, @parms;
|
||||
}
|
||||
}
|
||||
|
||||
my @pkgs;
|
||||
if (-d "../xemacs-packages") {
|
||||
@pkgs = qw (libs/edebug libs/xemacs-base comm/eudc oa/edit-utils);
|
||||
} else {
|
||||
@pkgs = ();
|
||||
}
|
||||
for (@pkgs) { s@^@../xemacs-packages/@; }
|
||||
open (FIND, "find lisp @pkgs -name '*.el' -print |") or die;
|
||||
while (my $file = <FIND>) {
|
||||
my $contents = FileContents $file;
|
||||
$contents =~ s/(?:\s|;);.*//mog;
|
||||
my @matches =
|
||||
($contents =~
|
||||
/\((def(?:un|subst|macro))\s+(\S+)\s+\(([^()]*)\)\s+\"((?:[^\\\"]|\\.)+)\"(.*?)\)/sgo);
|
||||
while (@matches) {
|
||||
my ($defform, $function, $parms, $docstring, $code_fragment) = splice (@matches, 0, 5);
|
||||
|
||||
my $funtype =
|
||||
$defform eq 'defmacro' ? 'Macro' :
|
||||
$code_fragment =~ /^\s*\(interactive\b/so ? 'Command' :
|
||||
'Function';
|
||||
|
||||
$docstring =~ s/^\n+//s;
|
||||
$docstring =~ s/\n+$//s;
|
||||
|
||||
my @parms = split (' ', $parms);
|
||||
|
||||
Check_function $function, $funtype, $docstring, @parms;
|
||||
}
|
||||
}
|
||||
|
||||
open (FIND, "find lisp @pkgs -name '*.el' -print |") or die;
|
||||
while (my $file = <FIND>) {
|
||||
my $contents = FileContents $file;
|
||||
$contents =~ s/(?:\s|;);.*//mog;
|
||||
|
||||
my @matches = ($contents =~ /^\((?:defalias|fset|define-function)\s+\'([A-Za-z0-9_-]+)\s+\'([A-Za-z0-9_-]+)/mog);
|
||||
while (@matches) {
|
||||
my ($alias, $aliasee) = splice (@matches, 0, 2);
|
||||
print "alias $alias aliasee $aliasee\n";
|
||||
if (exists $code_funtype{$aliasee}) { $code_funtype{$alias} = $code_funtype{$aliasee}; }
|
||||
if (exists $code_arglist{$aliasee}) { $code_arglist{$alias} = $code_arglist{$aliasee}; }
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $fun (sort keys %texi_funtype) {
|
||||
if (not exists $code_funtype{$fun}) {
|
||||
print "nuke-this-doc: $fun $texi_funtype{$fun}\n";
|
||||
}
|
||||
}
|
||||
|
||||
# arch-tag: e75331f5-5d1b-4393-ad5b-b0f87b5d47b0
|
||||
|
|
@ -1,530 +0,0 @@
|
|||
;;; cus-test.el --- tests for custom types and load problems
|
||||
|
||||
;; Copyright (C) 1998, 2000, 2002, 2006 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
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
#! /bin/sh
|
||||
|
||||
# Copyright (C) 2001, 2006 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
|
||||
|
|
@ -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/emacs-MM.NN.tar.gz and
|
||||
gnu/emacs/leim-MM.NN.tar.gz on alpha.gnu.org.
|
||||
|
||||
* After a few days of testing, if there are no problems, please report
|
||||
that Emacs works for you and what configuration you are testing it on.
|
||||
|
||||
* If you want to communicate with other pretesters, send mail to
|
||||
emacs-pretesters@gnu.org. I don't use that mailing list when I send
|
||||
to you because I've found that mailing lists tend to amplify random
|
||||
noise into long discussions or even arguments, and that can waste a
|
||||
lot of time. But when you have a reason to ask other pretesters for
|
||||
help, you can do it that way.
|
||||
|
||||
* It is absolutely vital that you 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
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
if [ $# -ne 2 ]; then
|
||||
echo "usage: $0 <old version number> <new version number>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f INSTALL -o ! -f configure -o ! -d lib-src ]; then
|
||||
echo "this script should be run in the emacs root directory" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
OLD=$1
|
||||
NEW=$2
|
||||
outfile=emacs-$NEW.announce
|
||||
oldtag=EMACS_PRETEST_$(echo $OLD|tr . _)
|
||||
newtag=EMACS_PRETEST_$(echo $NEW|tr . _)
|
||||
|
||||
if [ -f $outfile ]; then
|
||||
echo "$outfile exists"
|
||||
echo -n "interrupt to abort, ENTER to overwrite "; read answer
|
||||
fi
|
||||
|
||||
echo -n "tag name for OLD emacs version $OLD [$oldtag]: "; read answer
|
||||
if [ "$answer" ]; then oldtag=$answer; fi
|
||||
|
||||
echo -n "tag name for NEW emacs version $NEW [$newtag]: "; read answer
|
||||
if [ "$answer" ]; then newtag=$answer; fi
|
||||
|
||||
exec > $outfile
|
||||
|
||||
cat <<EOF
|
||||
|
||||
There is a new pretest available in
|
||||
|
||||
<ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-$NEW.tar.gz>
|
||||
<ftp://alpha.gnu.org/gnu/emacs/pretest/leim-$NEW.tar.gz>
|
||||
|
||||
Please report results from compiling and running the pretest to
|
||||
<emacs-pretest-bug@gnu.org>. Your feedback is necessary for us
|
||||
to know on which platforms the pretest has been tried.
|
||||
Please say whether you built with LEIM or not.
|
||||
|
||||
If you have the tars from the previous pretest, and you have the
|
||||
\`xdelta' utility, you can instead download the much smaller
|
||||
|
||||
<ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-$OLD-$NEW.xdelta>
|
||||
<ftp://alpha.gnu.org/gnu/emacs/pretest/leim-$OLD-$NEW.xdelta>
|
||||
|
||||
You can use a command like
|
||||
|
||||
$ xdelta patch XDELTA PREVIOUS-TAR CURRENT-TAR
|
||||
|
||||
to generate the new tar from the old one, where XDELTA is the xdelta
|
||||
file you downloaded, PREVIOUS-TAR is the tar file from the previous
|
||||
pretest, and CURRENT-TAR is the name of the tar file you downloaded.
|
||||
|
||||
Information about xdelta can be found on the GNU ftp site, in
|
||||
/non-gnu/xdelta.README.
|
||||
|
||||
Changes since $OLD
|
||||
|
||||
EOF
|
||||
|
||||
make-changelog-diff $oldtag $newtag
|
||||
|
||||
echo " announcement created in $outfile" >&2
|
||||
|
||||
# arch-tag: 605e00c7-7330-4c45-81e1-2ed53a13c39f
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
#! /bin/bash
|
||||
|
||||
if [ $# -ne 2 ]; then
|
||||
echo "usage: $0 TAG1 TAG2" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f INSTALL -o ! -f configure -o ! -d lib-src ]; then
|
||||
echo "this script should be run in the emacs root directory" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
cvs -q diff -b -r $1 -r $2 $(find -name ChangeLog|sort) |
|
||||
sed -n -e 's/^=\+/======/p' -e 's/^> //p' -e 's/^diff.*//p' \
|
||||
-e 's/^RCS file: .cvsroot.emacs.emacs.\(.*\),v/\1/p' |
|
||||
sed -n -e "/^======$/ {
|
||||
N
|
||||
N
|
||||
h
|
||||
d
|
||||
}
|
||||
H
|
||||
s/.*//
|
||||
x
|
||||
s/^\n//
|
||||
p"
|
||||
|
||||
# arch-tag: 7604a259-40b4-4f97-86b2-496a9c546f0a
|
||||
189
admin/make-emacs
189
admin/make-emacs
|
|
@ -1,189 +0,0 @@
|
|||
#! /usr/bin/perl
|
||||
|
||||
# Copyright (C) 2001, 2006 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
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
Instructions to create pretest or release tarballs.
|
||||
-- originally written by Gerd Moellmann, amended by Francesco Potortì
|
||||
with the initial help of Eli Zaretskii
|
||||
|
||||
For each step, check for possible errors.
|
||||
|
||||
1. cvs -q update -Pd
|
||||
|
||||
2. Bootstrap to make 100% sure all elc files are up-to-date, and to
|
||||
make sure that the later tagged version will bootstrap, should it be
|
||||
necessary to check it out.
|
||||
|
||||
3. Regenerate Emacs' AUTHORS file (M-x load-file RET
|
||||
lisp/emacs-lisp/authors.el RET, then M-x authors RET, then save
|
||||
the *Authors* buffer). This may require fixing syntactically
|
||||
incorrect ChangeLog entries beforehand.
|
||||
|
||||
4. Set the version number (M-x load-file RET admin/admin.el RET, then
|
||||
M-x set-version RET). For a release, add released change log
|
||||
entries (M-x add-release-logs RET).
|
||||
|
||||
5. rm configure; make bootstrap
|
||||
|
||||
6. Commit configure, README, AUTHORS, lisp/cus-load.el,
|
||||
lisp/finder-inf.el, lisp/version.el, man/emacs.texi,
|
||||
lispref/elisp.texi. Copy lisp/loaddefs.el to lisp/ldefs-boot.el
|
||||
and commit lisp/ldefs-boot.el. For a release, also commit the
|
||||
ChangeLog files in all directories.
|
||||
|
||||
7. make-dist --snapshot. Check the contents of the new tar with
|
||||
admin/diff-tar-files against an older tar file. Some old pretest
|
||||
tarballs are kept under fencepost.gnu.org:~pot/emacs-pretest/, while
|
||||
old emacs tarballs are at <ftp://ftp.gnu.org/pub/gnu/emacs/>.
|
||||
|
||||
8. xdelta delta emacs-OLD.tar.gz emacs-NEW.tar.gz emacs-OLD-NEW.xdelta
|
||||
|
||||
9. tar -zxf emacs-NEW.tar.gz; cd emacs-NEW
|
||||
./configure && make && make -n install
|
||||
Use `script' or M-x compile to save the compilation log in
|
||||
compile-NEW.log and compare it against an old one. The easiest way
|
||||
to do that is to visit the old log in Emacs, change the version
|
||||
number of the old Emacs to __, do the same with the new log and do
|
||||
M-x ediff. Especially check that Info files aren't built.
|
||||
|
||||
10. cd EMACS_ROOT_DIR; cvs tag TAG
|
||||
TAG is EMACS_PRETEST_XX_YY_ZZZ for a pretest, EMACS_XX_YY for a
|
||||
release.
|
||||
|
||||
11. admin/make-announcement OLD NEW
|
||||
This creates an announcement for pretests. OLD is the version used
|
||||
to make deltas with respect to NEW. Announcements for releases need
|
||||
to be crafted by hand. Use an older announcement to start with:
|
||||
look in ssh://fencepost.gnu.org/~pot/emacs-tarballs/.
|
||||
|
||||
12. Now you should upload the files to the GNU ftp server. In order to
|
||||
do that, you must be registered as an Emacs maintainer and have your
|
||||
GPG key acknowledged by the ftp people. Mail <ftp-upload@gnu.org>
|
||||
for instructions. Once you are there, for each file FILE to be
|
||||
released, create a detached GPG binary signature and a clearsigned
|
||||
directive file like this:
|
||||
gpg -b FILE
|
||||
echo directory: emacs/pretest > FILE.directive (for a pretest)
|
||||
echo directory: emacs > FILE.directive (for a release)
|
||||
gpg --clearsign FILE.directive
|
||||
Upload by anonymous ftp to ftp://ftp-upload.gnu.org/incoming/ftp/
|
||||
the files FILE, FILE.sig, FILE.directive.asc
|
||||
|
||||
13. After five minutes, verify that the files are visible at
|
||||
ftp://alpha.gnu.org/gnu/emacs/pretest/ for a pretest, at
|
||||
ftp://ftp.gnu.org/gnu/emacs/ for a release.
|
||||
|
||||
14. For a pretest, let Richard Stallman <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
|
||||
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
|
|
@ -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.]
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
How to Maintain Copyright Years for GNU Emacs
|
||||
|
||||
|
||||
"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."
|
||||
|
||||
--RMS, 2005-07-13
|
||||
|
||||
|
||||
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
|
||||
|
|
@ -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!
|
||||
|
|
@ -1,254 +0,0 @@
|
|||
Precompiled Distributions of
|
||||
Emacs for Windows
|
||||
|
||||
Version 21.3
|
||||
|
||||
April 22, 2003
|
||||
|
||||
This directory contains source and precompiled distributions for GNU
|
||||
Emacs on Windows NT/2000/XP and Windows 95/98/Me. This port is a part
|
||||
of the standard GNU Emacs distribution from the Free Software
|
||||
Foundation; the precompiled distributions are provided here for
|
||||
convenience since, unlike Unix, the majority of Windows users do not
|
||||
have access to a compiler (and, besides, do you really want to compile
|
||||
Emacs when you don't have to?).
|
||||
|
||||
If you have access to the World Wide Web, I would recommend pointing
|
||||
your favorite web browser to the following document (if you haven't
|
||||
already):
|
||||
|
||||
http://www.gnu.org/software/emacs/windows/ntemacs.html
|
||||
|
||||
The above web document is a far more complete version of this README
|
||||
file. If you don't have access to the Web, however, then read on.
|
||||
|
||||
|
||||
* IMPORTANT LEGAL REMINDER
|
||||
|
||||
If you want to redistribute any of the precompiled distributions of
|
||||
Emacs, be careful to check the implications of the GPL. For instance,
|
||||
if you put the emacs-21.3-bin-i386.tar.gz file from this directory on
|
||||
an Internet site, you must arrange to distribute the source files of
|
||||
the SAME version (i.e. emacs-21.3-src.tar.gz).
|
||||
|
||||
Making a link to our copy of the source is NOT sufficient, since we
|
||||
might upgrade to a new version while you are still distributing the
|
||||
old binaries.
|
||||
|
||||
|
||||
* Distributions in .tar.gz format
|
||||
|
||||
Emacs is distributed primarily as a set of large gzipped tar files
|
||||
(*.tar.gz). Because Emacs is quite large and therefore difficult to
|
||||
download over unreliable connections, it is provided in several
|
||||
combinations, ranging from the complete source plus executables, to
|
||||
just the minimal amount needed to run without any source, plus a
|
||||
couple of optional packages. Here are the combinations (i386 in the
|
||||
name indicates a tarball contains executables compiled for
|
||||
Intel-compatible x86 systems):
|
||||
|
||||
+ Primary precompiled distribution, including lisp source:
|
||||
|
||||
emacs-21.3-fullbin-i386.tar.gz
|
||||
|
||||
+ Minimal precompiled distribution, which excludes lisp source:
|
||||
|
||||
emacs-21.3-bin-i386.tar.gz
|
||||
|
||||
You can download emacs-21.3-lisp.tar.gz to get the lisp source, if
|
||||
you later decide you want it - it is useful for understanding how
|
||||
packages work, and how they can best be setup or customized.
|
||||
|
||||
|
||||
NB. If you just want to run Emacs, get one of the distributions above.
|
||||
|
||||
|
||||
+ Bare executables, only useful if you want to get the complete source
|
||||
release below, but can't compile Emacs yourself:
|
||||
|
||||
emacs-21.3-barebin-i386.tar.gz (requires emacs-21.3-src.tar.gz)
|
||||
|
||||
+ Undumped executable, only needed for rebuilding Emacs after changing
|
||||
certain core lisp files:
|
||||
|
||||
emacs-21.3-undumped-i386.tar.gz
|
||||
|
||||
+ Optional package providing the Library of Emacs Input Methods for
|
||||
typing non-ascii characters, notably Chinese, Japanese and Korean,
|
||||
but also including European and other character sets:
|
||||
|
||||
emacs-21.3-leim.tar.gz
|
||||
|
||||
+ The complete official source for Emacs:
|
||||
|
||||
emacs-21.3-src.tar.gz
|
||||
|
||||
+ The complete official source for LEIM:
|
||||
|
||||
leim-21.3-src.tar.gz
|
||||
|
||||
|
||||
* Distributions in multi-file .zip format
|
||||
|
||||
A second distribution in the form of multiple small .zip files is also
|
||||
provided, for the benefit of people who have unreliable internet
|
||||
connections, or who need to copy the distribution onto floppy disks:
|
||||
|
||||
em213b*.zip
|
||||
|
||||
This is equivalent to getting emacs-21.3-bin-i386.tar.gz above.
|
||||
The lisp source is available as em213l*.zip.
|
||||
|
||||
|
||||
* Distributions for non-x86 platforms
|
||||
|
||||
I try to make this port available for all platforms supported by
|
||||
Windows (it should build on all supported Windows NT/9x platforms).
|
||||
However, I do not always have access to non-x86 platforms, and so I
|
||||
cannot guarantee to provide precompiled distributions for the other
|
||||
platforms myself. If you find there are no binaries for your
|
||||
platform, and you have access to a Microsoft compiler, then you can
|
||||
download the source and compile Emacs yourself (and, if you do, please
|
||||
consider contributing your executables; send me mail and we can make
|
||||
arrangements for making them available on this ftp server.)
|
||||
|
||||
|
||||
* Unpacking distributions
|
||||
|
||||
Programs for handling the distribution file formats can be found in
|
||||
the utilities directory:
|
||||
|
||||
http://mirrors.sunsite.dk/gnu/windows/emacs/utilities/
|
||||
|
||||
For gzipped tar files, you will need either gunzip.exe and tar.exe
|
||||
together, or djtarnt.exe. djtarnt.exe can also unpack .zip files. I
|
||||
strongly urge you to use these utilities since they were the ones used
|
||||
to create the distributions; the most common problem people have in
|
||||
trying to get Emacs to run is due to some other utility program
|
||||
corrupting the distribution while unpacking.
|
||||
|
||||
Open a command prompt (MSDOS) window. Decide on a directory in which
|
||||
to place Emacs. Move the distribution to that directory, and then
|
||||
unpack it as follows.
|
||||
|
||||
If you have the gzipped tar version, use gunzip to uncompress the tar
|
||||
file on the fly, and pipe the output through tar with the "xvf" flags
|
||||
to extract the files from the tar file:
|
||||
|
||||
% gunzip -c some.tar.gz | tar xvf -
|
||||
|
||||
You may see messages from tar about not being able to change the
|
||||
modification time on directories, and from gunzip complaining about a
|
||||
broken pipe. These messages are harmless and you can ignore them. On
|
||||
Windows NT, unpacking tarballs this way leaves them in compressed
|
||||
form, taking up less space on disk. Unfortunately, on Windows 95 and
|
||||
98, a large temporary file is created, so it is better to use the
|
||||
djtarnt.exe program, which performs the equivalent operation in one
|
||||
step:
|
||||
|
||||
% djtarnt -x some.tar.gz
|
||||
|
||||
You may be prompted to rename or overwrite directories when using
|
||||
djtarnt: simply type return to continue (this is harmless).
|
||||
|
||||
If you have the multi-file .zip distribution, use djtarnt to unpack
|
||||
all of the .zip files:
|
||||
|
||||
% djtarnt -x *.zip
|
||||
|
||||
Once you have unpacked a precompiled distribution of Emacs, it should
|
||||
have the following subdirectories:
|
||||
|
||||
bin etc info lisp lock site-lisp
|
||||
|
||||
If your utility failed to create the lock directory, then you can
|
||||
simply create it by hand (it is initially empty).
|
||||
|
||||
One final step is needed only when installing from the multi-file .zip
|
||||
distribution, in order to recreate emacs.exe from its fragments (it is
|
||||
too big to fit on a floppy even when zipped):
|
||||
|
||||
% cd emacs-21.3\bin
|
||||
% stitch
|
||||
|
||||
|
||||
* Unpacking with other tools
|
||||
|
||||
If you do use other utility programs to unpack the distribution, check
|
||||
the following to be sure the distribution was not corrupted:
|
||||
|
||||
+ Be sure to disable the CR/LF translation or the executables will be
|
||||
unusable. Older versions of WinZipNT would enable this translation
|
||||
by default. If you are using WinZipNT, disable it. (I don't have
|
||||
WinZipNT myself, and I do not know the specific commands necessary
|
||||
to disable it.)
|
||||
|
||||
+ Check that filenames were not truncated to 8.3. For example, there
|
||||
should be a file lisp/abbrevlist.el; if this has been truncated to
|
||||
abbrevli.el, your distribution has been corrupted while unpacking
|
||||
and Emacs will not start.
|
||||
|
||||
+ I've been told that some utilities (WinZip again?) don't create the
|
||||
lock subdirectory. The lock subdirectory needs to be created.
|
||||
|
||||
+ I've also had reports that the "gnu-win32" port of tar corrupts the
|
||||
executables. Use the version of tar or djtarnt in the utilities
|
||||
directory instead.
|
||||
|
||||
If you believe you have unpacked the distributions correctly and are
|
||||
still encountering problems, see the section on Further Information
|
||||
below.
|
||||
|
||||
|
||||
* Compiling from source
|
||||
|
||||
If you would like to compile Emacs from source, download the source
|
||||
distribution, unpack it in the same manner as a precompiled
|
||||
distribution, and look in the file nt/INSTALL for detailed directions.
|
||||
You can either use the Microsoft compiler included with Visual C++, or
|
||||
GCC 2.95 or later with MinGW support, to compile the source. The port
|
||||
of GCC included in Cygwin is supported, but check the nt/INSTALL file
|
||||
if you have trouble since some builds of GNU make aren't supported.
|
||||
|
||||
|
||||
* Further information
|
||||
|
||||
If you have access to the World Wide Web, I would recommend pointing
|
||||
your favorite web browser to following the document (if you haven't
|
||||
already):
|
||||
|
||||
http://www.gnu.org/software/emacs/windows/ntemacs.html
|
||||
|
||||
This document serves as an FAQ and a source for further information
|
||||
about the Windows port and related software packages.
|
||||
|
||||
In addition to the FAQ, there is a mailing list for discussing issues
|
||||
related to the Windows port of Emacs. For information about the
|
||||
list, see this Web page:
|
||||
|
||||
http://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!
|
||||
|
||||
Andrew Innes
|
||||
(andrewi@gnu.org)
|
||||
|
|
@ -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!
|
||||
|
|
@ -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
|
||||
|
|
@ -1,135 +0,0 @@
|
|||
@echo off
|
||||
|
||||
rem Beware broken ports of tar. Recent cygwin versions work well, older
|
||||
rem cygwin versions and the current MSys port have problems with DOS
|
||||
rem line ends when reading file names from a file. Other ports have their
|
||||
rem own problems too.
|
||||
set TAR=tar
|
||||
|
||||
rem Make a copy of current Emacs source
|
||||
if (%3) == () goto usage
|
||||
if not (%4) == () goto %4
|
||||
if not (%4) == (src) goto :lisp
|
||||
|
||||
:src
|
||||
|
||||
echo Create full source distribution, excluding leim
|
||||
%TAR% --exclude leim --exclude _marker --exclude DOC --exclude DOC-X --exclude TAGS --exclude bin --exclude obj --exclude obj-spd --exclude oo --exclude oo-spd --exclude *~ --exclude *.rej -cvf - emacs-%1 | gzip -9 > %2-src.tar.gz
|
||||
if not (%4) == () goto end
|
||||
|
||||
:lisp
|
||||
echo Create limited elisp source distribution
|
||||
%TAR% --exclude *.rej --exclude *.elc --exclude *~ -cvf - emacs-%1/lisp | gzip -9 > %2-lisp.tar.gz
|
||||
if not (%4) == () goto end
|
||||
|
||||
:bin
|
||||
|
||||
set eld=emacs-%1/lisp
|
||||
|
||||
rem List of Lisp files that are not compiled and that should be
|
||||
rem included in the bin distribution.
|
||||
|
||||
rem It would be better to generate this list automatically. It is the
|
||||
rem list of all .el files for which there is no corresponding .elc
|
||||
rem file, minus ldefs-boot.el. --lute
|
||||
|
||||
set elfiles=%eld%/cus-load.el %eld%/emacs-lisp/cl-specs.el %eld%/eshell/esh-groups.el %eld%/eshell/esh-maint.el %eld%/finder-inf.el %eld%/forms-d2.el %eld%/forms-pass.el %eld%/international/latin-1.el %eld%/international/latin-2.el %eld%/international/latin-3.el %eld%/international/latin-4.el %eld%/international/latin-5.el %eld%/international/latin-8.el %eld%/international/latin-9.el %eld%/international/mule-conf.el %eld%/language/czech.el %eld%/language/devanagari.el %eld%/language/english.el %eld%/language/georgian.el %eld%/language/greek.el %eld%/language/hebrew.el %eld%/language/japanese.el %eld%/language/kannada.el %eld%/language/korean.el %eld%/language/lao.el %eld%/language/malayalam.el %eld%/language/misc-lang.el %eld%/language/romanian.el %eld%/language/slovak.el %eld%/language/tamil.el %eld%/language/thai.el %eld%/language/utf-8-lang.el %eld%/loaddefs.el %eld%/loadup.el %eld%/mail/blessmail.el %eld%/mh-e/mh-acros.el %eld%/mh-e/mh-gnus.el %eld%/mh-e/mh-loaddefs.el %eld%/obsolete/keyswap.el %eld%/patcomp.el %eld%/paths.el %eld%/play/bruce.el %eld%/subdirs.el %eld%/term/AT386.el %eld%/term/apollo.el %eld%/term/bobcat.el %eld%/term/internal.el %eld%/term/iris-ansi.el %eld%/term/linux.el %eld%/term/lk201.el %eld%/term/news.el %eld%/term/vt102.el %eld%/term/vt125.el %eld%/term/vt200.el %eld%/term/vt201.el %eld%/term/vt220.el %eld%/term/vt240.el %eld%/term/vt300.el %eld%/term/vt320.el %eld%/term/vt400.el %eld%/term/vt420.el %eld%/term/wyse50.el %eld%/version.el
|
||||
|
||||
set fns_el=
|
||||
for %%f in (emacs-%1/bin/fns*) do set fns_el=%fns_el% emacs-%1/bin/%%f
|
||||
|
||||
echo Create bin distribution
|
||||
copy %3\README.W32 emacs-%1\README.W32
|
||||
|
||||
del #files# #elfiles#
|
||||
for %%f in (emacs-%1/BUGS emacs-%1/README emacs-%1/README.W32) do echo %%f>>#files#
|
||||
for %%f in (emacs-%1/bin/fns*) do echo emacs-%1/bin/%%f>>#elfiles#
|
||||
for %%f in (emacs-%1/bin emacs-%1/etc emacs-%1/info emacs-%1/lisp) do echo %%f>>#files#
|
||||
for %%f in (emacs-%1/lock emacs-%1/site-lisp) do echo %%f>>#files#
|
||||
for %%f in (%elfiles% emacs-%1/site-lisp/subdirs.el) do echo %%f>>#elfiles#
|
||||
|
||||
%TAR% --exclude temacs.exe --exclude emacs.mdp --exclude *.pdb --exclude *.opt --exclude "*.el" --exclude "*~" -T #files# -cvf %2-bin-i386.tar
|
||||
%TAR% -T #elfiles# -rvf %2-bin-i386.tar
|
||||
gzip -9 %2-bin-i386.tar
|
||||
del emacs-%1\README.W32
|
||||
rem del #files# #elfiles#
|
||||
if not (%4) == () goto end
|
||||
|
||||
:fullbin
|
||||
|
||||
echo Create full bin distribution
|
||||
copy %3\README.W32 emacs-%1\README.W32
|
||||
|
||||
%TAR% --exclude temacs.exe --exclude emacs.mdp --exclude *.pdb --exclude *.opt --exclude *~ -cvf - emacs-%1/BUGS emacs-%1/README emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc emacs-%1/info emacs-%1/lisp emacs-%1/lock emacs-%1/site-lisp | gzip -9 > %2-fullbin-i386.tar.gz
|
||||
del emacs-%1\README.W32
|
||||
if not (%4) == () goto end
|
||||
|
||||
:leim
|
||||
|
||||
echo Create archive with precompiled leim files
|
||||
%TAR% -cvf - emacs-%1/leim/leim-list.el emacs-%1/leim/quail emacs-%1/leim/ja-dic | gzip -9 > %2-leim.tar.gz
|
||||
if not (%4) == () goto end
|
||||
|
||||
:undumped
|
||||
|
||||
echo Create archive with extra files needed for redumping emacs
|
||||
copy %3\README-UNDUMP.W32 emacs-%1\README-UNDUMP.W32
|
||||
copy %3\dump.bat emacs-%1\bin
|
||||
if exist emacs-%1\src\obj-spd\i386\temacs.exe copy emacs-%1\src\obj-spd\i386\temacs.exe emacs-%1\bin
|
||||
if exist emacs-%1\src\oo-spd\i386\temacs.exe copy emacs-%1\src\oo-spd\i386\temacs.exe emacs-%1\bin
|
||||
%TAR% -cvf - emacs-%1/README-UNDUMP.W32 emacs-%1/bin/dump.bat emacs-%1/bin/temacs.exe | gzip -9 > %2-undumped-i386.tar.gz
|
||||
del emacs-%1\bin\temacs.exe
|
||||
del emacs-%1\bin\dump.bat
|
||||
del emacs-%1\README-UNDUMP.W32
|
||||
if not (%4) == () goto end
|
||||
|
||||
:barebin
|
||||
|
||||
echo Create archive with just the basic binaries and generated files
|
||||
echo (the user needs to unpack the full source distribution for
|
||||
echo everything else)
|
||||
copy %3\README.W32 emacs-%1\README.W32
|
||||
%TAR% -cvf - emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc/DOC emacs-%1/etc/DOC-X | gzip -9 > %2-barebin-i386.tar.gz
|
||||
del emacs-%1\README.W32
|
||||
if not (%4) == () goto end
|
||||
|
||||
goto end
|
||||
|
||||
rem Only do this if explicitly requested
|
||||
:zipfiles
|
||||
|
||||
echo Create zip files for bin and lisp archives
|
||||
mkdir distrib
|
||||
cd distrib
|
||||
gunzip -c ..\%2-bin-i386.tar.gz | %TAR% xf -
|
||||
rem Need to split emacs.exe into fragments because it is too big now
|
||||
rem to fit on a floppy even by itself.
|
||||
copy %3\stitch.bat %2\bin
|
||||
cd %2\bin
|
||||
split -b 1000000 emacs.exe emacs
|
||||
del emacs.exe
|
||||
cd ..\..
|
||||
zip -rp9 em%5bin %2
|
||||
rm -rf %2
|
||||
zipsplit -n 1400000 -b .. em%5bin.zip
|
||||
del em%5bin.zip
|
||||
gunzip -c ..\%2-lisp.tar.gz | %TAR% xf -
|
||||
zip -rp9 em%5lis %2
|
||||
rm -rf %2
|
||||
zipsplit -n 1400000 -b .. em%5lis.zip
|
||||
del em%5lis.zip
|
||||
cd ..
|
||||
|
||||
goto end
|
||||
|
||||
:usage
|
||||
echo Generate source and binary distributions of emacs.
|
||||
echo Usage: %0 emacs-version dist-basename distfiles [lisp,bin,undumped,barebin]
|
||||
echo (e.g., %0 19.34 emacs-19.34.5 d:\andrewi\distfiles)
|
||||
echo Or: %0 emacs-version dist-basename distfiles "zipfiles" short-version
|
||||
echo (e.g., %0 20.6 emacs-20.6 d:\andrewi\distfiles zipfiles 206)
|
||||
:end
|
||||
|
||||
goto skipArchTag
|
||||
arch-tag: 6e2ddd92-c1c9-4992-b6b5-207aaab72f68
|
||||
:skipArchTag
|
||||
|
|
@ -1,342 +0,0 @@
|
|||
#!/bin/sh
|
||||
# quick-install-emacs -- do a halfway-decent job of installing emacs quickly
|
||||
# Written by Miles Bader <miles@gnu.org>
|
||||
|
||||
# This script is mainly intended for emacs maintainer or pretesters who
|
||||
# install emacs very often. See the --help output for more details.
|
||||
|
||||
PUBLIC_LIBSRC_BINARIES='b2m emacsclient etags ctags ebrowse'
|
||||
PUBLIC_LIBSRC_SCRIPTS='grep-changelog rcs-checkin'
|
||||
|
||||
AVOID="CVS -DIC README COPYING ChangeLog ~ [.]orig$ [.]rej$ Makefile makefile stamp-subdir [.]cvsignore [.]arch-ids [{]arch[}] [.][cho]$ make-docfile testfile test-distrib"
|
||||
|
||||
# Prune old binaries lying around in the source tree
|
||||
PRUNE=no
|
||||
# Re-install files even if they already exist
|
||||
FORCE=no
|
||||
# Command verbose flag
|
||||
VERBOSE=''
|
||||
|
||||
me="`basename $0`"
|
||||
|
||||
# Install commands (if the user specifies the `--verbose' option, it is
|
||||
# passed to these commands, so that feature only works if these commands
|
||||
# implement it too)
|
||||
LINK='cp -lf'
|
||||
COPY='cp -f'
|
||||
REMOVE='rm -r'
|
||||
MKDIR='mkdir -p'
|
||||
|
||||
# Used to execute commands once once we create them
|
||||
EXEC='sh'
|
||||
|
||||
NAWK=/usr/bin/nawk
|
||||
|
||||
# avoid non-standard command output from non-C locales
|
||||
unset LANG LC_ALL LC_MESSAGES
|
||||
|
||||
# Some messages
|
||||
USAGE="Usage: $me [OPTION...] BUILD_TREE [PREFIX]"
|
||||
TRY="Try "\`"$me --help' for more information."
|
||||
|
||||
# Parse command-line options
|
||||
while :; do
|
||||
case "$1" in
|
||||
-n|--dry-run)
|
||||
EXEC=cat; shift;;
|
||||
-p|--prune)
|
||||
PRUNE=yes; shift;;
|
||||
-P|--no-prune)
|
||||
PRUNE=no; shift;;
|
||||
--prune-only)
|
||||
PRUNE=only; shift;;
|
||||
-f|--force)
|
||||
FORCE=yes; shift;;
|
||||
-v|--verbose)
|
||||
VERBOSE="-v"; shift;;
|
||||
--help)
|
||||
cat <<EOF
|
||||
$USAGE
|
||||
Install emacs quickly
|
||||
|
||||
-n, --dry-run print installation commands instead of
|
||||
executing them
|
||||
|
||||
-f, --force install even files that haven't changed
|
||||
-v, --verbose print messages describing what is done
|
||||
|
||||
-p, --prune prune old generated files
|
||||
-P, --no-prune don't prune old generated files (default)
|
||||
--prune-only prune old generated files, but don't install
|
||||
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
$me install emacs \`incrementally,' that is, it will
|
||||
install only those files that have changed since the last time it was
|
||||
invoked, and remove any obsolete files from the installation
|
||||
directories. It also uses hard-links into the source and build trees to
|
||||
do the install, so it uses much less space than the default Makefile
|
||||
install target; however, this also means that $me can
|
||||
not install onto a disk partition other than the one on which the source
|
||||
and build directories reside.
|
||||
|
||||
Optionally, $me can also remove old versions of
|
||||
automatically generated files that are version-specific (such as the
|
||||
versioned emacs executables in the \`src' directory, and the DOC-* files
|
||||
in the \`etc' directory). The latter action is called \`pruning,' and
|
||||
can be enabled using the \`-p' or \`--prune' options.
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
--version)
|
||||
cat <<EOF
|
||||
$me 1.6
|
||||
|
||||
Written by Miles Bader <miles@gnu.org>
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
-[^-]?*)
|
||||
# split concatenated single-letter options apart
|
||||
FIRST="$1"; shift
|
||||
set -- `echo $FIRST | sed 's/-\(.\)\(.*\)/-\1 -\2/'` "$@"
|
||||
;;
|
||||
-*)
|
||||
echo 1>&2 "$me: unrecognized option "\`"$1'"
|
||||
echo 1>&2 "$TRY"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
break;
|
||||
esac
|
||||
done
|
||||
|
||||
LINK_CMD="$LINK $VERBOSE"
|
||||
REMOVE_CMD="$REMOVE $VERBOSE"
|
||||
|
||||
case $# in
|
||||
1) BUILD="$1";;
|
||||
2) BUILD="$1"; prefix="$2";;
|
||||
*)
|
||||
echo 1>&2 "$USAGE"
|
||||
echo 1>&2 "$TRY"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if test ! -d "$BUILD"; then
|
||||
echo 1>&2 "$me: $BUILD: Build tree not found"
|
||||
exit 2
|
||||
elif test ! -r "$BUILD/config.status"; then
|
||||
echo 1>&2 "$me: $BUILD: Not a proper build tree, config.status not found"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
CONFIG_STATUS="$BUILD/config.status"
|
||||
get_config_var ()
|
||||
{
|
||||
if ! sed -n "s/^s\(.\)@$1@\1\(.*\)\1.*$/\2/p" $CONFIG_STATUS | sed q | grep ''
|
||||
then
|
||||
echo 1>&2 "$me: $1: Configuration variable not found in $CONFIG_STATUS"
|
||||
exit 4
|
||||
fi
|
||||
}
|
||||
|
||||
test x"$SRC" = x && { SRC="`get_config_var srcdir`" || exit 4 ; }
|
||||
test x"$prefix" = x && { prefix="`get_config_var prefix`" || exit 4 ; }
|
||||
test x"$ARCH" = x && { ARCH="`get_config_var host`" || exit 4 ; }
|
||||
|
||||
VERSION=`grep 'defconst[ ]*emacs-version' $SRC/lisp/version.el \
|
||||
| sed -e 's/^[^"]*"\([^"]*\)".*$/\1/'`
|
||||
|
||||
DST_SHARE="$prefix/share/emacs/$VERSION"
|
||||
DST_BIN="$prefix/bin"
|
||||
DST_LIBEXEC="$prefix/libexec/emacs/$VERSION/$ARCH"
|
||||
DST_INFO="$prefix/info"
|
||||
|
||||
maybe_mkdir ()
|
||||
{
|
||||
if ! test -d "$1"; then
|
||||
$MKDIR $VERBOSE "$1" 2>&1 | sed "s/^mkdir:/$me:/" 1>&2
|
||||
fi
|
||||
}
|
||||
|
||||
maybe_mkdir "$DST_BIN"
|
||||
maybe_mkdir "$DST_SHARE"
|
||||
maybe_mkdir "$DST_SHARE/site-lisp"
|
||||
maybe_mkdir "$DST_LIBEXEC"
|
||||
maybe_mkdir "$DST_INFO"
|
||||
|
||||
( # start of command-generating sub-shell
|
||||
|
||||
PRUNED=""
|
||||
if test x"$PRUNE" != xno; then
|
||||
for D in `ls -1t $BUILD/etc/DOC-* | sed 1d`; do
|
||||
echo $REMOVE_CMD $D
|
||||
PRUNED="$PRUNED $D"
|
||||
done
|
||||
for D in `ls -1t $BUILD/src/emacs-$VERSION.* | sed 1d`; do
|
||||
echo $REMOVE_CMD $D
|
||||
PRUNED="$PRUNED $D"
|
||||
done
|
||||
fi
|
||||
|
||||
test x"$PRUNE" = xonly && exit 0
|
||||
|
||||
maybe_emit_copy ()
|
||||
{
|
||||
if test "$FORCE" = yes || ! cmp -s $1 $2; then
|
||||
echo $LINK_CMD $1 $2
|
||||
fi
|
||||
}
|
||||
|
||||
maybe_emit_copy $BUILD/src/emacs $DST_BIN/emacs
|
||||
maybe_emit_copy $BUILD/src/emacs $DST_BIN/emacs-$VERSION
|
||||
|
||||
for F in $PUBLIC_LIBSRC_BINARIES; do
|
||||
maybe_emit_copy $BUILD/lib-src/$F $DST_BIN/$F
|
||||
done
|
||||
for F in $PUBLIC_LIBSRC_SCRIPTS; do
|
||||
maybe_emit_copy $SRC/lib-src/$F $DST_BIN/$F
|
||||
done
|
||||
|
||||
if test x"$SRC" = x"$BUILD"; then
|
||||
PFXS="$BUILD"
|
||||
else
|
||||
PFXS="$SRC $BUILD"
|
||||
fi
|
||||
|
||||
for SUBDIR in lisp leim etc lib-src info; do
|
||||
# defaults
|
||||
SHARED=no
|
||||
FORCED=''
|
||||
AVOID_PAT="`echo "($AVOID)" | tr ' ' '|'`"
|
||||
|
||||
# Set subdir-specific values
|
||||
case $SUBDIR in
|
||||
lisp|leim)
|
||||
DST="$DST_SHARE/$SUBDIR"
|
||||
;;
|
||||
etc)
|
||||
DST="$DST_SHARE/$SUBDIR"
|
||||
# COPYING is in the avoid list, but there should be a copy of it in
|
||||
# the install etc dir, so make that here.
|
||||
FORCED="$DST/COPYING"
|
||||
;;
|
||||
lib-src)
|
||||
DST="$DST_LIBEXEC"
|
||||
AVOID_PAT="`echo "($AVOID ($PUBLIC_LIBSRC_BINARIES $PUBLIC_LIBSRC_SCRIPTS)\$)" | tr ' ' '|'`"
|
||||
;;
|
||||
info)
|
||||
DST="$DST_INFO"
|
||||
SHARED=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
for PFX in $PFXS; do
|
||||
if [ -d $PFX/$SUBDIR ]; then
|
||||
for DIR in `(cd $PFX/$SUBDIR; find . -type d -print | sed 's@^./@@')`; do
|
||||
if [ -d $DST/$DIR ]; then
|
||||
echo Directory $DST/$DIR exists
|
||||
else
|
||||
echo Directory $DST/$DIR non-existant
|
||||
if [ "`echo $DIR | egrep -v "$AVOID_PAT"`" ]; then
|
||||
maybe_mkdir $DST/$DIR
|
||||
fi
|
||||
fi
|
||||
done
|
||||
diff -sqr $PFX/$SUBDIR $DST
|
||||
fi
|
||||
done | $NAWK '
|
||||
BEGIN {
|
||||
src_pat = "^'"$SRC"'/'"$SUBDIR"'/"
|
||||
build_pat = "^'"$BUILD"'/'"$SUBDIR"'/"
|
||||
dst_pat = "^'"$DST"'/"
|
||||
dst_pfx = "'"$DST"'/"
|
||||
avoid_pat = "'"$AVOID_PAT"'"
|
||||
force = ("'"$FORCE"'" == "yes")
|
||||
shared = ("'"$SHARED"'" == "yes")
|
||||
init_bool_array(pruned, "'"$PRUNED"'")
|
||||
init_bool_array(forced, "'"$FORCED"'")
|
||||
}
|
||||
function init_bool_array(array, string, a,k)
|
||||
{
|
||||
split (string, a)
|
||||
for (k in a)
|
||||
array[a[k]] = 1
|
||||
}
|
||||
function install(src, dst)
|
||||
{
|
||||
if (! (src in pruned)) {
|
||||
cp[src] = dst;
|
||||
from[dst] = src;
|
||||
delete rm[dst];
|
||||
}
|
||||
}
|
||||
function update(src, dst, copy)
|
||||
{
|
||||
if (src in pruned) {
|
||||
rm[dst] = 1;
|
||||
delete from[dst]
|
||||
} else {
|
||||
if (copy)
|
||||
cp[src] = dst;
|
||||
from[dst] = src;
|
||||
delete rm[dst];
|
||||
}
|
||||
}
|
||||
function uninstall(dst)
|
||||
{
|
||||
if (!(dst in from))
|
||||
rm[dst] = 1;
|
||||
}
|
||||
/^Directory / {
|
||||
if ($2 ~ avoid_pat) {
|
||||
if ($NF == "exists")
|
||||
uninstall($2)
|
||||
} else
|
||||
update(0, $2, 0)
|
||||
next
|
||||
}
|
||||
/^Files / {
|
||||
if ($4 ~ avoid_pat && !($4 in forced))
|
||||
uninstall($4)
|
||||
else if ($NF == "identical")
|
||||
update($2, $4, force)
|
||||
else
|
||||
update($2, $4, 1)
|
||||
next
|
||||
}
|
||||
/^Only / {
|
||||
pfx = $3
|
||||
sub (/:$/, "/", pfx)
|
||||
|
||||
if (pfx ~ dst_pat) {
|
||||
if (! shared)
|
||||
uninstall(pfx $4)
|
||||
} else {
|
||||
subdir = pfx
|
||||
if (subdir ~ src_pat)
|
||||
sub (src_pat, "", subdir)
|
||||
else
|
||||
sub (build_pat, "", subdir)
|
||||
|
||||
dst = dst_pfx subdir $4
|
||||
if (! (dst ~ avoid_pat))
|
||||
install(pfx $4, dst)
|
||||
}
|
||||
next
|
||||
}
|
||||
END {
|
||||
for (f in rm)
|
||||
print "'"$REMOVE_CMD"' " f
|
||||
for (f in cp)
|
||||
print "'"$LINK_CMD"' " f " " cp[f]
|
||||
}
|
||||
'
|
||||
done
|
||||
|
||||
) | eval $EXEC
|
||||
|
||||
# arch-tag: 9322b572-9755-4cf7-a67a-21e6505f1477
|
||||
137
admin/revdiff
137
admin/revdiff
|
|
@ -1,137 +0,0 @@
|
|||
#! /usr/bin/perl
|
||||
|
||||
# Copyright (C) 2001, 2006 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
|
||||
|
|
@ -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
|
||||
299
config.bat
299
config.bat
|
|
@ -1,299 +0,0 @@
|
|||
@echo off
|
||||
rem ----------------------------------------------------------------------
|
||||
rem Configuration script for MSDOS
|
||||
rem Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2004, 2006
|
||||
rem Free Software Foundation, Inc.
|
||||
|
||||
rem This file is part of GNU Emacs.
|
||||
|
||||
rem GNU Emacs is free software; you can redistribute it and/or modify
|
||||
rem it under the terms of the GNU General Public License as published by
|
||||
rem the Free Software Foundation; either version 2, or (at your option)
|
||||
rem any later version.
|
||||
|
||||
rem GNU Emacs is distributed in the hope that it will be useful,
|
||||
rem but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
rem GNU General Public License for more details.
|
||||
|
||||
rem You should have received a copy of the GNU General Public License
|
||||
rem along with GNU Emacs; see the file COPYING. If not, write to the
|
||||
rem Free Software Foundation, Inc., 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
|
||||
1476
config.guess
vendored
1476
config.guess
vendored
File diff suppressed because it is too large
Load diff
1605
config.sub
vendored
1605
config.sub
vendored
File diff suppressed because it is too large
Load diff
3292
configure.in
3292
configure.in
File diff suppressed because it is too large
Load diff
|
|
@ -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
6
etc/.gitignore
vendored
|
|
@ -1,6 +0,0 @@
|
|||
fns-*
|
||||
icons
|
||||
*.ps
|
||||
*.log
|
||||
*.dvi
|
||||
DOC DOC-*
|
||||
176
etc/BABYL
176
etc/BABYL
|
|
@ -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"
|
||||
|
|
@ -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.
|
||||
157
etc/COOKIES
157
etc/COOKIES
|
|
@ -1,157 +0,0 @@
|
|||
[Someone sent this in from California, and we decided to extend
|
||||
our campaign against information hoarding to recipes as well
|
||||
as software. (Recipes are the closest thing, not involving computers,
|
||||
to software.)
|
||||
|
||||
The story appears to be a myth, according to the Chicago Tribune,
|
||||
which says that Mrs Fields Cookies hoards the information completely.
|
||||
Therefore, this recipe can be thought of as a compatible replacement.
|
||||
We have reports that the cookies it makes are pretty good.]
|
||||
|
||||
Someone at PG&E called the Mrs. Fields Cookie office
|
||||
and requested the recipe for her cookies. They asked
|
||||
her for her charge card number, and she gave it to them
|
||||
thinking the cost would be $15 to $25. It turned out
|
||||
to be $200!
|
||||
|
||||
Therefore, this person is giving the recipe to anyone
|
||||
and everyone she knows (and doesn't know) so that
|
||||
someone can get use of her $200. Anyway, just keep
|
||||
passing it on.
|
||||
|
||||
Cream together: 2 cups butter
|
||||
2 cups sugar
|
||||
2 cups brown sugar
|
||||
|
||||
Add: 4 eggs
|
||||
2 tsp. vanilla
|
||||
|
||||
Mis together in
|
||||
separate bowl: 4 cups flour
|
||||
5 cups oatmeal (put small
|
||||
amounts of oatmeal in blender until it turns to
|
||||
powder. Measure out 5 cups of oatmeal and only
|
||||
"powderize" that, NOT 5 cups "powderized" oatmeal)
|
||||
|
||||
1 tsp salt
|
||||
2 tsp baking powder
|
||||
2 tsp baking soda
|
||||
|
||||
Mix: All of the above
|
||||
|
||||
Add: 24 oz. bag of chocolate chips and
|
||||
1 finely grated 8 oz Hershey bar (plain)
|
||||
|
||||
Add: 3 cups chopped nuts (any kind)
|
||||
|
||||
Bake on greased cookie sheet (make golf ball sized balls) and
|
||||
bake about two inches apart. Bake at 350 degrees for 8 - 10
|
||||
minutes. DO NOT OVERBAKE. Makes 112.
|
||||
|
||||
From: ucdavis!lll-lcc!hplabs!parcvax!bane@ucbvax.berkeley.edu (John R. Bane)
|
||||
Subject: Re: free cookie foundation?
|
||||
|
||||
Hi! I "stole" your very expensive cookie recipe off the net. If you
|
||||
want to send me your SnailMail address, I'll be glad to send you a
|
||||
dollar (I would like to suggest this to the net, but I think there is
|
||||
some netiquette rule against asking for money - or is that only money
|
||||
for oneself?) to help defray the cost (it's not much, but if EVERYone
|
||||
who took the recipe sent you a dollar, it would help).
|
||||
|
||||
Here also is another cookie recipe which I'm very fond of.
|
||||
|
||||
Makes 6-8 dozen
|
||||
Bake at 375 degrees for ~10 min.
|
||||
|
||||
Cream together:
|
||||
|
||||
1 cup shortening (I use Weight Watcher's Reduced Calorie Margarine!)
|
||||
1/4 cup peanut butter (I recommend the non-sugared kind)
|
||||
1/2 cup sugar
|
||||
1/2 cup brown sugar
|
||||
2 eggs
|
||||
1 teaspoon vanilla
|
||||
|
||||
Add:
|
||||
|
||||
1/2 cup flour
|
||||
1 teaspoon soda
|
||||
1/2 teaspoon salt
|
||||
2 cups rolled oats (I use the 5-min variety)
|
||||
1-2 cups chocolate chips (I use 2 cups semi-sweet - ummmm!)
|
||||
1 cup nuts (I use pecan pieces - don't get them crushed, or the extra
|
||||
oil will make greasy cookies)
|
||||
1 cup shredded or flaked coconut
|
||||
|
||||
(The nuts were listed as optional and I added the coconut myself, but
|
||||
I really love them there! You could also add things like m&m's, or
|
||||
raisins (I don't care for raisins in cookies, but you might). I've
|
||||
always wanted to try banana chips.)
|
||||
|
||||
Mix well. Drop by teaspoonfuls on greased cookie sheet (I use pam).
|
||||
Bake at 375 degrees for approx. 10 min.
|
||||
|
||||
My aunt found this recipe in an Amish book called something like
|
||||
"Eating Well When The Whole World Is Starving," and although I thought
|
||||
a cookie recipe was a bit odd for a book like that, they are about the
|
||||
healthiest a cookie is ever likely to get.
|
||||
|
||||
They are also very easy to make (no blending, sifting, rolling, etc.)
|
||||
and extremely delicious. I get rave reviews and recipe requests whenever
|
||||
I make them.
|
||||
|
||||
- rene
|
||||
|
||||
Chocolate Chip Cookies - Glamorous, crunchy, rich with chocolate bits & nuts.
|
||||
|
||||
Also known as "Toll House" Cookies ... from Kenneth and Ruth Wakefield's
|
||||
charming New England Toll House on the outskirts of Whitman, Massachusetts.
|
||||
These cookies were first introduced to American homemakers in 1939 through
|
||||
our series of radio talks on "Famous Foods From Famous Eating Places."
|
||||
|
||||
Mix Thoroughly :
|
||||
2/3 cup soft shortening ( part butter )
|
||||
1/2 cup granulated sugar
|
||||
1/2 cup brown sugar ( packed )
|
||||
1 egg
|
||||
1 tsp vanilla
|
||||
|
||||
Sift together and stir in :
|
||||
1-1/2 cups sifted flour (*)
|
||||
1/2 tsp soda
|
||||
1/2 tsp salt
|
||||
|
||||
Stir in :
|
||||
1/2 cup cut-up nuts
|
||||
6 oz package of semi-sweet chocolate pieces ( about 1-1/4 cups )
|
||||
|
||||
|
||||
(*) for a softer, more rounded cookie, use 1-3/4 cups sifted flour.
|
||||
|
||||
|
||||
Drop rounded teaspoonfuls about 2" apart on ungreased baking sheet. Bake until
|
||||
delicately browned ... cookies should still be soft. Cool slightly before you
|
||||
remove them from the baking sheet.
|
||||
|
||||
Temperature: 375 F. ( modern oven )
|
||||
Time: bake 8 - 10 minutes
|
||||
Amount: 4 - 5 dozen 2" cookies
|
||||
|
||||
|
||||
=====
|
||||
|
||||
Personal comments :
|
||||
|
||||
I find it tastes better with a mixture of shortening and butter, as they say.
|
||||
|
||||
You don't need << all >> of that sugar, and it can be whatever color you want.
|
||||
|
||||
The nuts are optional. Feel free to play with the recipe. I put oatmeal in it,
|
||||
reducing flour accordingly, and sometimes cinnamon.
|
||||
|
||||
I also find it useful to grease the cookie sheets.
|
||||
|
||||
I think I'm going to go bake some now ...
|
||||
|
||||
-- richard
|
||||
|
||||
340
etc/COPYING
340
etc/COPYING
|
|
@ -1,340 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin St, 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 Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, 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 Library General
|
||||
Public License instead of this License.
|
||||
2967
etc/ChangeLog
2967
etc/ChangeLog
File diff suppressed because it is too large
Load diff
742
etc/DEBUG
742
etc/DEBUG
|
|
@ -1,742 +0,0 @@
|
|||
Debugging GNU Emacs
|
||||
Copyright (C) 1985, 2000, 2001, 2002, 2003, 2004,
|
||||
2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to anyone to make or distribute verbatim copies
|
||||
of this document as received, in any medium, provided that the
|
||||
copyright notice and permission notice are preserved,
|
||||
and that the distributor grants the recipient permission
|
||||
for further redistribution as permitted by this notice.
|
||||
|
||||
Permission is granted to distribute modified versions
|
||||
of this document, or of portions of it,
|
||||
under the above conditions, provided also that they
|
||||
carry prominent notices stating who last changed them.
|
||||
|
||||
[People who debug Emacs on Windows using native Windows debuggers
|
||||
should read the Windows-specific section near the end of this
|
||||
document.]
|
||||
|
||||
** When you debug Emacs with GDB, you should start it in the directory
|
||||
where the executable was made. That directory has a .gdbinit file
|
||||
that defines various "user-defined" commands for debugging Emacs.
|
||||
(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.
|
||||
|
||||
** 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
|
||||
|
||||
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 neccesarily the one
|
||||
that the debugger reports.
|
||||
|
||||
Another problematic area with the MS debugger is with variables that
|
||||
are stored in registers: it will sometimes display wrong values for
|
||||
those variables. Usually you will not be able to see any value for a
|
||||
register variable, but if it is only being stored in a register
|
||||
temporarily, you will see an old value for it. Again, you need to
|
||||
look at the disassembly to determine which registers are being used,
|
||||
and look at those registers directly, to see the actual current values
|
||||
of these variables.
|
||||
|
||||
;;; arch-tag: fbf32980-e35d-481f-8e4c-a2eca2586e6b
|
||||
99
etc/DISTRIB
99
etc/DISTRIB
|
|
@ -1,99 +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, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to anyone to make or distribute
|
||||
verbatim copies of this document provided that the
|
||||
copyright notice and this permission notice are preserved.
|
||||
|
||||
GNU Emacs is legally owned by the Free Software Foundation, but we
|
||||
regard the foundation more as its custodian on behalf of the public.
|
||||
|
||||
In the GNU project, when we speak of "free software", this refers to
|
||||
liberty, not price. Specifically, it refers to the users' freedom to
|
||||
study, copy, change and improve the software. Sometimes users pay
|
||||
money for copies of GNU software, and sometimes they get copies at no
|
||||
charge. But regardless of how they got the software, or whether it
|
||||
was modified by anyone else along the way, they have the freedom to
|
||||
copy and change it--those freedoms are what "free software" means.
|
||||
|
||||
The precise conditions for copying and modification are stated in the
|
||||
document "GNU General Public License," a copy of which is required to
|
||||
be distributed with every copy of GNU Emacs. It is usually in a file
|
||||
named `COPYING' in the same directory as this file. These conditions
|
||||
are designed to make sure that everyone who has a copy of GNU Emacs
|
||||
(including modified versions) has the freedom to redistribute and
|
||||
change it.
|
||||
|
||||
If you do not know anyone to get a copy of GNU Emacs from, you can
|
||||
order a cd-rom from the Free Software Foundation. We distribute
|
||||
several Emacs versions. We also distribute nicely typeset copies of
|
||||
the Emacs user manual, Emacs Lisp Reference Manual, the Emacs
|
||||
reference card, etc. See http://www.gnu.org/order/order.html.
|
||||
|
||||
If you have Internet access, you can copy the latest Emacs
|
||||
distribution from hosts, such as ftp.gnu.org. There are several ways
|
||||
to do this; see http://www.gnu.org/software/software.html for more
|
||||
information.
|
||||
|
||||
Emacs has been run on GNU/Linux, FreeBSD, NetBSD, OpenBSD, and on many
|
||||
Unix systems, on a variety of types of cpu, as well as on MSDOS,
|
||||
Windows and MacOS. It also formerly worked on VMS and on Apollo
|
||||
computers, though with some deficiencies that reflect problems in
|
||||
these operating systems. See the file `MACHINES' in this directory
|
||||
(see above) for a full list of machines that GNU Emacs has been tested
|
||||
on, with machine-specific installation notes and warnings.
|
||||
|
||||
Note that there is significant variation between Unix systems
|
||||
supposedly running the same version of Unix; it is possible that what
|
||||
works in GNU Emacs for me does not work on your system due to such an
|
||||
incompatibility. Since I must avoid reading Unix source code, I
|
||||
cannot even guess what such problems may exist.
|
||||
|
||||
GNU Emacs is distributed with no warranty (see the General Public
|
||||
License for full details, in the file `COPYING' in this directory (see
|
||||
above)), and neither I nor the Free Software Foundation promises any
|
||||
kind of support or assistance to users. The foundation keeps a list
|
||||
of people who are willing to offer support and assistance for hire.
|
||||
See http://www.gnu.org/help/gethelp.html.
|
||||
|
||||
However, we plan to continue to improve GNU Emacs and keep it
|
||||
reliable, so please send me any complaints and suggestions you have.
|
||||
I will probably fix anything that I consider a malfunction. I may
|
||||
make improvements that are suggested, but I may choose not to.
|
||||
|
||||
If you are on the Internet, report bugs to bug-gnu-emacs@gnu.org. You
|
||||
can use the Emacs command M-x report-bug RET to mail a bug report.
|
||||
Please read the Bugs section of the Emacs manual before reporting
|
||||
bugs.
|
||||
|
||||
General questions about the GNU Project can be asked of gnu@gnu.org.
|
||||
|
||||
If you are a computer manufacturer, I encourage you to ship a copy of
|
||||
GNU Emacs with every computer you deliver. The same copying
|
||||
permission terms apply to computer manufacturers as to everyone else.
|
||||
You should consider making a donation to help support the GNU project;
|
||||
if you estimate what it would cost to distribute some commercial
|
||||
product and divide it by five, that is a good amount.
|
||||
|
||||
If you like GNU Emacs, please express your satisfaction with a
|
||||
donation: send me or the Foundation what you feel Emacs has been worth
|
||||
to you. If you are glad that I developed GNU Emacs and distribute it
|
||||
as free software, rather than following the obstructive and antisocial
|
||||
practices typical of software developers, reward me. If you would
|
||||
like the Foundation to develop more free software, contribute.
|
||||
|
||||
Your donations will help to support the development of additional GNU
|
||||
software. GNU/Linux systems (variants of GNU, based on the kernel
|
||||
Linux) have millions of users, but there is still much to be done.
|
||||
For more information on GNU, see the file `GNU' in this directory (see
|
||||
above).
|
||||
|
||||
Richard M Stallman
|
||||
Chief GNUisance,
|
||||
President of the Free Software Foundation
|
||||
670
etc/ERC-NEWS
670
etc/ERC-NEWS
|
|
@ -1,670 +0,0 @@
|
|||
ERC NEWS -*- outline -*-
|
||||
|
||||
* Changes in ERC 5.2 (unreleased)
|
||||
|
||||
* Changes in ERC 5.1.2
|
||||
|
||||
** Fix compiler errors in erc-autojoin.el and erc-dcc.el.
|
||||
|
||||
** Move to end of prompt when ERC reconnects to a server.
|
||||
|
||||
** Changes and additions to modules
|
||||
|
||||
*** Spell-checking (erc-spelling.el)
|
||||
|
||||
**** Don't spell-check nicks or words that are prefixed with '/'.
|
||||
|
||||
**** Remove flyspell properties from words we shouldn't spell-check.
|
||||
|
||||
**** Fix an issue that caused the ispell process to reload every time
|
||||
we switch to an ERC buffer.
|
||||
|
||||
*** Timestamps (erc-stamp.el)
|
||||
|
||||
**** Fix an inconsistency in calculating width of right timestamps.
|
||||
|
||||
**** Rename option `erc-timestamp-right-align-by-pixel' to
|
||||
`erc-timestamp-use-align-to'. This controls whether to use the more
|
||||
fail-proof method of aligning right timestamps, as mentioned below.
|
||||
|
||||
**** Fix a right timestamp spacing problem that used to occur when
|
||||
erc-stamp.el was byte-compiled. Now that this is fixed, it is safe to
|
||||
use the method that aligns right timestamps perfectly in Emacs22 with
|
||||
X. If the current version of Emacs doesn't support this method, use
|
||||
the simpler method, which is prone to alignment issues for math
|
||||
symbols and other variable-width text.
|
||||
|
||||
A side effect of using this new method is that there will only be one
|
||||
space before a right timestamp in any saved logs. If this is
|
||||
unacceptable, set `erc-timestamp-use-align-to' to nil.
|
||||
|
||||
* Changes in ERC 5.1.1
|
||||
|
||||
** Fix a requirement on cl.el.
|
||||
|
||||
** Use tls.el for SSL connections, rather than ssl.el.
|
||||
|
||||
** Changes and additions to modules
|
||||
|
||||
*** ibuffer integration (erc-ibuffer.el)
|
||||
|
||||
**** Update this to work with the version of ibuffer.el that comes with
|
||||
recent Emacs variants.
|
||||
|
||||
*** Old completion (erc-complete.el)
|
||||
|
||||
**** Fix a few errors.
|
||||
|
||||
*** Speedbar (erc-speedbar.el)
|
||||
|
||||
**** Make this work with the version of speedbar.el that comes with
|
||||
recent Emacs variants.
|
||||
|
||||
*** Timestamps (erc-stamp.el)
|
||||
|
||||
**** By default, use a more failsafe method of displaying right timestamps.
|
||||
To get right timestamps to align perfectly in Emacs22 using X, set the
|
||||
new `erc-timestamp-right-align-by-pixel' option to non-nil.
|
||||
|
||||
*** Viper compatibility (erc-viper.el)
|
||||
|
||||
**** Since most of these changes are now merged into Emacs22, detect
|
||||
whether we need these changes and install them only if necessary.
|
||||
|
||||
* Changes in ERC 5.1
|
||||
|
||||
** Improve XEmacs compatibility.
|
||||
|
||||
** Namespace changes
|
||||
|
||||
*** Now ERC doesn't use global variable space.
|
||||
Renamed all variables that didn't start with "erc-".
|
||||
|
||||
o `away' is now `erc-away'
|
||||
|
||||
o `current-nick' is now `erc-server-current-nick'
|
||||
|
||||
o `last-peers' is now `erc-server-last-peers'
|
||||
|
||||
o `last-ping-time' is now `erc-server-last-ping-time'
|
||||
|
||||
o `last-sent-time' is now `erc-server-last-sent-time'
|
||||
|
||||
o `lines-sent' is now `erc-server-lines-sent'
|
||||
|
||||
o `quitting' is now `erc-server-quitting'
|
||||
|
||||
*** Remove the `with-erc-channel-buffer' function.
|
||||
|
||||
** Bugfixes
|
||||
|
||||
*** Don't inadvertently destroy face properties.
|
||||
|
||||
*** Load erc scripts in a safer way.
|
||||
|
||||
*** Don't insert a timestamp if text at point is invisible.
|
||||
|
||||
*** Don't hide messages from those in `erc-fools' by default.
|
||||
Color their nicks instead.
|
||||
|
||||
*** Use a more foolproof method of encoding and decoding strings
|
||||
before sending to a channel.
|
||||
|
||||
** Backend changes
|
||||
|
||||
*** Renamed some server-specific variables
|
||||
|
||||
o `erc-announced-server-name' is now `erc-server-announced-name'
|
||||
|
||||
o `erc-auto-reconnect' is now `erc-server-auto-reconnect'
|
||||
|
||||
o `erc-connect-function' is now `erc-server-connect-function'
|
||||
|
||||
o `erc-default-coding-system' is now `erc-server-coding-system'
|
||||
|
||||
o `erc-duplicate-timeout' is now `erc-server-duplicate-timeout'
|
||||
|
||||
o `erc-duplicates' is now `erc-server-duplicates'
|
||||
|
||||
o `erc-lag' is now `erc-server-lag'
|
||||
|
||||
o `erc-prevent-duplicates' is now `erc-server-prevent-duplicates'
|
||||
|
||||
o `erc-previous-read' is now `erc-server-filter-data'
|
||||
|
||||
o `erc-process' is now `erc-server-process'
|
||||
|
||||
o `erc-ping-handler' is now `erc-server-send-ping-handler'
|
||||
|
||||
o `erc-ping-interval' is now `erc-server-send-ping-interval'
|
||||
|
||||
*** Renamed some functions
|
||||
|
||||
o `erc-connect' is now `erc-server-connect'
|
||||
|
||||
o `erc-process-filter' is now `erc-server-filter-function'
|
||||
|
||||
o `erc-send-command' is now `erc-server-send'
|
||||
|
||||
o `erc-send-single-line' is now `erc-send-input'
|
||||
|
||||
o `erc-setup-periodical-server-ping' is now
|
||||
`erc-server-setup-periodical-server-ping'
|
||||
|
||||
o `erc-split-command is now `erc-split-line'
|
||||
|
||||
*** New options
|
||||
|
||||
o erc-server-flood-margin, erc-server-flood-penalty: New options
|
||||
that allow tweaking of flood control.
|
||||
|
||||
o erc-split-line-length: The maximum line length of a single
|
||||
message.
|
||||
|
||||
*** New variables
|
||||
|
||||
o erc-server-flood-last-message, erc-server-flood-queue,
|
||||
erc-server-flood-timer: Flood control.
|
||||
|
||||
o erc-server-processing-p: Indicate when we're currently processing
|
||||
a message.
|
||||
|
||||
*** Remove some options
|
||||
|
||||
o `erc-flood-limit'
|
||||
o `erc-flood-limit2'
|
||||
|
||||
** New customization group `erc-server' for dealing with IRC servers.
|
||||
|
||||
** ERC can now be installed by doing `make install' from the command line.
|
||||
|
||||
** ERC now has a manual in erc.texi.
|
||||
Type `make doc' to generate HTML and Info versions of it.
|
||||
|
||||
** ERC no longer depends on cl.el.
|
||||
Only the macros in cl-macs.el are used.
|
||||
|
||||
** Fix an edge case when quitting as new messages come in.
|
||||
|
||||
** Make flood protection toggle-able as on/off, removing the 'strict option.
|
||||
|
||||
** If possible, re-use channel buffers when reconnecting to a server.
|
||||
|
||||
** Text in ERC buffers is now read-only by default.
|
||||
To get the previous behavior,
|
||||
|
||||
** Changes and additions to modules
|
||||
|
||||
*** Auto-join (erc-autojoin.el)
|
||||
|
||||
**** Recognize the Azzurra server.
|
||||
|
||||
*** BBDB (erc-bbdb.el)
|
||||
|
||||
**** When the user types /WHOIS, ask for a record to merge to.
|
||||
|
||||
**** Store the displayed name of a BitlBee contact.
|
||||
The new `erc-bbdb-bitlbee-name-field' option specifies the field to use
|
||||
to store this information.
|
||||
|
||||
**** Don't prompt for a name on /JOIN or /NICK.
|
||||
|
||||
*** Button (erc-button.el)
|
||||
|
||||
**** Fix customization of `erc-button-alist'
|
||||
|
||||
**** New option `erc-button-nickname-face' determines the face to use
|
||||
when coloring ERC nicknames.
|
||||
|
||||
*** Channel tracking (erc-track.el)
|
||||
|
||||
**** Remove channels from the modified channels list if not currently
|
||||
connected. This should remove residue from the mode line after
|
||||
quitting ERC.
|
||||
|
||||
**** Recognize buttonized text
|
||||
|
||||
*** Highlighting (erc-match.el)
|
||||
|
||||
**** Highlight current nickname by default.
|
||||
|
||||
**** Added the option of beeping when certain matches occur.
|
||||
Add `erc-beep-on-match' to `erc-text-matched-hook' to enable
|
||||
beeping. Set the new variable `erc-beep-match-types' which match
|
||||
types that make beeps.
|
||||
|
||||
*** Nicklist (erc-nicklist.el)
|
||||
|
||||
**** Fix a couple of errors.
|
||||
|
||||
**** Make sure a stray mouse click doesn't trigger an error.
|
||||
|
||||
**** Insert icons from the /images directory next to nicks.
|
||||
This indicates their away status. The location is customizable via
|
||||
the new `erc-nicklist-icons-directory' option.
|
||||
|
||||
If you do not want these icons, set `erc-nicklist-use-icons' to nil.
|
||||
|
||||
*** Nickserv identification (erc-nickserv.el)
|
||||
|
||||
**** Recognize Azzurra and OFTC networks.
|
||||
|
||||
*** Old completion (erc-complete.el)
|
||||
|
||||
**** Disable by default.
|
||||
|
||||
*** Programmable completion (erc-pcomplete.el)
|
||||
|
||||
**** Enable by default.
|
||||
|
||||
*** Timestamps (erc-stamp.el)
|
||||
|
||||
**** On Emacs22, align right timestamps perfectly, even if variable-width
|
||||
characters are used. If we aren't using Emacs22, move text farther
|
||||
away from the right margin when variable-width characters are used.
|
||||
It is considered better to misalign the stamp by a bit than to go past
|
||||
the right margin.
|
||||
|
||||
**** Enable by default
|
||||
|
||||
** New modules
|
||||
|
||||
*** Spell-checking (erc-spelling.el)
|
||||
|
||||
**** Use flyspell in ERC.
|
||||
|
||||
*** Viper compatibility (erc-viper.el)
|
||||
|
||||
**** Helps ERC work correctly in viper-mode.
|
||||
|
||||
* Changes in ERC 5.0.4
|
||||
|
||||
** Fix a problem with undo in channels.
|
||||
|
||||
* Changes in ERC 5.0.3
|
||||
|
||||
** Fix typo in the `ctcp-request-to' entry of the English catalog.
|
||||
|
||||
** Debugging with edegug has been made easier in all of the
|
||||
erc-with-* and with-erc* macros.
|
||||
|
||||
** Non-ASCII character sets should be better supported when sending
|
||||
and processing messages.
|
||||
|
||||
** A load failure with erc-autoaway.el and Emacs21 has been fixed.
|
||||
|
||||
** A few XEmacs warnings were fixed.
|
||||
|
||||
** Changes and additions to modules
|
||||
|
||||
*** Backend (erc-backend.el)
|
||||
|
||||
**** Move the check for hidden messages into `erc-display-message'
|
||||
so there isn't so much replicated code.
|
||||
|
||||
**** Add `definition-name' property to constructed symbols so that
|
||||
`find-function' and `find-variable' will be able to locate them.
|
||||
|
||||
**** Make sure logs are inserted info the correct channel buffers.
|
||||
There was previously an error when using `erc-insert-log-on-open' in
|
||||
combination with autojoin to multiple channels.
|
||||
|
||||
*** Button (erc-button.el)
|
||||
|
||||
**** The layering of `erc-button-face' on other faces in ERC buffers
|
||||
has been improved.
|
||||
|
||||
*** Channel tracking (erc-track.el)
|
||||
|
||||
**** Use optimal amount of whitespace around modified channels
|
||||
indicator. Previously, there was an additional unnecessary space.
|
||||
|
||||
**** Fix an error that occurred when unchecked buffers existed when
|
||||
invoking /QUIT.
|
||||
|
||||
* Changes in ERC 5.0.2
|
||||
|
||||
** If a channel key is required for a certain channel, ERC will prompt
|
||||
for one if `erc-prompt-for-channel-key' is non-nil.
|
||||
|
||||
** ERC doesn't try to reconnect if the network connection is refused
|
||||
when using `open-network-stream-nowait' as the `erc-connect-function'.
|
||||
|
||||
** Messages from multiple servers will not go to the currently active
|
||||
buffer. The messages from each server will be contained in the most
|
||||
recently active channel/server buffer that corresponds with the
|
||||
server.
|
||||
|
||||
** Some text messages were cleaned up slightly.
|
||||
|
||||
** Button faces should no longer "cover" other faces.
|
||||
|
||||
** Made some XEmacs compatibility fixes.
|
||||
|
||||
** Nicknames containing a backslash are now correctly highlighted as
|
||||
current-nick and buttonized as nicks.
|
||||
|
||||
** `erc-server-select' doesn't offer networks without servers as a
|
||||
choice anymore.
|
||||
|
||||
** Non-ASCII character support has been improved.
|
||||
|
||||
** Changes and additions to modules
|
||||
|
||||
*** Menu (erc-menu.el)
|
||||
|
||||
**** You can now save logs and truncate buffers from the menu-bar.
|
||||
|
||||
* Changes in ERC 5.0.1
|
||||
|
||||
** Narrowing in ERC buffers no longer causes formatting errors.
|
||||
|
||||
** The BBDB module now loads correctly when customizing `erc-modules'.
|
||||
|
||||
** The value of `erc-button-face' is now respected.
|
||||
|
||||
** Fixed a bug which caused a read-only error during connection.
|
||||
|
||||
** Server buffers are now tracked correctly.
|
||||
This means that `erc-track-priority-faces-only', `erc-track-exclude',
|
||||
and `erc-track-exclude-types' now work with server buffers.
|
||||
|
||||
* Changes in ERC 5.0
|
||||
|
||||
** Channel members are now stored as a hash-table.
|
||||
`erc-server-users' and `erc-channel-users' are now hash-tables, rather
|
||||
than alists. This significantly increases performance, especially in
|
||||
large channels. Each channel member is stored as an `erc-server-user'
|
||||
struct, with additional information about the channels they are on
|
||||
stored in an `erc-channel-user' struct. Code using old alist-style
|
||||
channel members needs to be updated to work with hash-tables.
|
||||
This new code also removes the need for erc-members.el, which has been
|
||||
removed.
|
||||
|
||||
** The way ERC deals with input from the server has changed.
|
||||
All server response code is now in a new file, erc-backend.el. There
|
||||
should be no real user visible changes. There are, however, a few
|
||||
major changes for implementers, and module writers:
|
||||
|
||||
*** The PARSED response that all handlers get called with is
|
||||
no longer a vector, but an `erc-response' struct.
|
||||
|
||||
This means LESS MAGIC NUMBERS in the ERC source code, but a few
|
||||
changes in how you get at parsed responses.
|
||||
|
||||
The sender is accessed via `erc-response.sender'.
|
||||
|
||||
The command is accessed via `erc-response.command'.
|
||||
|
||||
The arguments to the command (everything after the command and
|
||||
before the colon) are accessed via `erc-response.command-args'.
|
||||
This is a /list/ of arguments in the order they appear in the
|
||||
unparsed response.
|
||||
|
||||
The contents of the response is accessed via
|
||||
`erc-response.contents'.
|
||||
|
||||
Should, for some reason, you want to do something with the
|
||||
/unparsed/ response, you can get it via `erc-response.unparsed'.
|
||||
|
||||
*** The `erc-server-hook-list' mechanism is gone.
|
||||
|
||||
All server response handlers should be defined with
|
||||
`define-erc-response-handler'. This defines functions and
|
||||
corresponding hook variables.
|
||||
|
||||
The mapping of server commands to hook variables is no longer
|
||||
done via `erc-event-to-hook', but through an #'equal hashtable,
|
||||
`erc-server-responses'. In order to find a hook you do:
|
||||
|
||||
(erc-get-hook command)
|
||||
|
||||
See the docstring of `define-erc-response-handler' for more
|
||||
information.
|
||||
|
||||
*** ALL hook variables have been renamed.
|
||||
|
||||
In accordance with recommendations in the Emacs Lisp manual,
|
||||
the hook variables are no longer called `erc-server-FOO-hook',
|
||||
but rather `erc-server-FOO-functions'. This is to indicate
|
||||
that the functions they call take arguments.
|
||||
|
||||
All the modules in ERC have been updated to reflect this change,
|
||||
but external module authors should beware.
|
||||
|
||||
** The values of `erc-mode-line-format' and `erc-header-line-format'
|
||||
are now defined as strings to be formatted using `format-spec'.
|
||||
`erc-mode-line-format' does not replace the whole mode-line anymore,
|
||||
only `mode-line-buffer-identification' is set. This way, personal
|
||||
mode-line configurations are not modified and all key bindings work as
|
||||
expected. The process status (connecting, closed) is now shown in
|
||||
`mode-line-process'.
|
||||
|
||||
** Customization of ERC variables has been made easier. Variables
|
||||
have been split into more groups for better organization.
|
||||
|
||||
** New variables
|
||||
|
||||
o `erc-send-whitespace-lines' - Set this to send lines even if they
|
||||
are empty.
|
||||
|
||||
o `erc-manual-set-nick-on-bad-nick-p' - If the nickname you chose is
|
||||
already taken or not allowed, your nick is not changed and you can
|
||||
try again manually if this is non-nil.
|
||||
|
||||
o `erc-mode-line-away-status-format' - You can now set what is shown
|
||||
in the mode-line when you are away.
|
||||
|
||||
o `erc-header-line-uses-help-echo-p' - The header-line now uses the
|
||||
help-echo property. You can set this to nil to disable it.
|
||||
|
||||
o `erc-format-query-as-channel-p' - Set this to nil to have messages
|
||||
in the query buffer formatted like private messages.
|
||||
|
||||
o `erc-show-channel-key-p' - The channel key is now shown with the
|
||||
other channel modes in the header line. Set this to nil if you
|
||||
want it hidden.
|
||||
|
||||
o `erc-prompt-for-channel-key' - Set this if you want to be prompted
|
||||
for the channel key (channel's mode is +k) when you call
|
||||
`erc-join-channel' interactively.
|
||||
|
||||
o `erc-kill-server-buffer-on-quit' - If non-nil, kill the server
|
||||
buffer automatically when you quit.
|
||||
|
||||
** New hooks
|
||||
|
||||
o `erc-join-hook' - Called when you join a channel.
|
||||
|
||||
o `erc-kick-hook' - Called when you are kicked from a channel. The
|
||||
channel's buffer is sent as an argument to functions called from
|
||||
this hook.
|
||||
|
||||
o `erc-nick-changed-functions' - Whenever your nickname changes
|
||||
successfully, the functions in this hook are run with the
|
||||
arguments NEW-NICK and OLD-NICK.
|
||||
|
||||
** New command /WHOAMI - Do a /WHOIS on your current nickname.
|
||||
|
||||
** The key binding for changing channel modes is now C-c C-o.
|
||||
|
||||
** Removed variables
|
||||
|
||||
o `erc-echo-notices-in-minibuffer-flag' and
|
||||
`erc-echo-notices-in-current-buffer' - You should use
|
||||
`erc-echo-notice-hook' and `erc-echo-notice-always-hook' instead.
|
||||
|
||||
o `erc-prompt-interactive-input' has been removed (commented out)
|
||||
because nickname completion does not work with it.
|
||||
|
||||
o All INFO buffer-related variables and functions have been removed.
|
||||
|
||||
** You can now disable modules by setting `erc-modules' with the
|
||||
customization interface.
|
||||
|
||||
** Changes and additions to modules
|
||||
|
||||
*** Autoaway (erc-autoaway.el)
|
||||
|
||||
**** New variable `erc-autoaway-no-auto-back-regexp' - Add text which,
|
||||
when you type anything matching it, will not automatically discard
|
||||
your away status when `erc-auto-discard-away' is non-nil.
|
||||
|
||||
*** Filling (erc-fill.el)
|
||||
|
||||
**** New variable `erc-fill-variable-maximum-indentation' - Don't
|
||||
indent more than this many characters when indenting a message from a
|
||||
user with a long nickname.
|
||||
|
||||
*** Goodies (erc-goodies.el)
|
||||
|
||||
**** Miscellaneous small modules have been moved from erc.el.
|
||||
The functions erc-add-scroll-to-bottom, erc-make-read-only,
|
||||
erc-send-distinguish-noncommands, erc-interpret-controls, erc-unmorse,
|
||||
erc-smiley, and erc-occur, which were defined in the main erc.el file
|
||||
have been moved to erc-goodies.el and have mostly been translated to
|
||||
the modules scrolltobottom, readonly, noncommands, irccontrols, smiley
|
||||
and unmorse.
|
||||
|
||||
**** New variables
|
||||
|
||||
o `erc-input-line-position' - The line number to use with
|
||||
`erc-scroll-to-bottom'.
|
||||
|
||||
o `erc-beep-p' - Beep if there is a \C-g control character in a
|
||||
message.
|
||||
|
||||
*** Channel lists (erc-list.el)
|
||||
|
||||
**** New variable `erc-chanlist-highlight-face' - A face used for
|
||||
highlighting the current line.
|
||||
|
||||
*** Highlighting (erc-match.el)
|
||||
|
||||
**** `erc-current-nick-highlight-type' has new options: 'keyword and
|
||||
'nick-or-keyword.
|
||||
|
||||
*** Menu (erc-menu.el)
|
||||
|
||||
**** The `IRC' menu is now automatically added to `erc-mode' buffers.
|
||||
|
||||
*** Networks (erc-nets.el)
|
||||
|
||||
**** The functions for determining current network are in this file.
|
||||
There were a couple of functions spread about in different files which
|
||||
each had a different way of determining the current network. The
|
||||
methods have been combined, and the big list of known networks
|
||||
(`erc-networks-alist') is being put to use. You can access the
|
||||
network's name by calling the new function `erc-network'. This
|
||||
returns the name of the current network as a symbol or 'Unknown if it
|
||||
could not determine which network it is.
|
||||
|
||||
*** Nicklist (erc-nicklist.el)
|
||||
|
||||
**** ERC has a new way of displaying nicknames in a channel.
|
||||
The new file erc-nicklist.el defines a new command `erc-nicklist'
|
||||
which pops up a small Emacs window showing the nicknames of all
|
||||
members of the current channel. The implementation is not complete
|
||||
and is rather proof-of-concept for now. The result is something a bit
|
||||
like erc-speedbar, but not quite as invasive, and doesn't require use
|
||||
of a new frame.
|
||||
|
||||
*** Internet services / Nickserv (erc-nickserv.el)
|
||||
|
||||
**** Network detection is now taken care of by erc-nets.el.
|
||||
The function `erc-current-network' is deprecated, use `erc-network'
|
||||
instead. The variable `erc-networks' has been removed, use
|
||||
`erc-networks-alist'. The network symbols used in
|
||||
`erc-nickserv-alist' now match those in `erc-networks-alist'.
|
||||
|
||||
**** New variable `erc-nickserv-identify-mode' - Choose which method
|
||||
to use for automatic identification: you can wait for Nickserv to ask
|
||||
you to identify (the default), or send an identify message
|
||||
automatically after you change your nickname.
|
||||
|
||||
*** Speedbar (erc-speedbar.el)
|
||||
|
||||
**** New variable `erc-speedbar-sort-users-type' - Sort users in a
|
||||
channel by activity, alphabetically, or not at all.
|
||||
|
||||
*** Timestamps (erc-stamp.el)
|
||||
|
||||
**** `erc-timestamp-only-if-changed-flag' now works when
|
||||
`erc-insert-timestamp-function' is set to 'erc-insert-timestamp-left.
|
||||
|
||||
**** New variable `erc-timestamp-intangible' - Set this to nil if
|
||||
timestamps should not have the 'intangible property.
|
||||
|
||||
*** Channel tracking (erc-track.el)
|
||||
|
||||
**** Using faces to indicate channel activity in the modeline now works
|
||||
in XEmacs.
|
||||
|
||||
**** New variables
|
||||
|
||||
o `erc-track-priority-faces-only' - Ignore changes in a channel
|
||||
unless there is a face from the `erc-track-faces-priority-list' in
|
||||
the message.
|
||||
|
||||
o `erc-track-exclude-server-buffer' - Ignore changes in the server
|
||||
buffer.
|
||||
|
||||
o `erc-track-position-in-mode-line' - Set the position in the
|
||||
mode-line where modified channels are shown (only works in GNU
|
||||
Emacs versions above 21.3).
|
||||
|
||||
* Changes in ERC 4.0
|
||||
|
||||
** The module system has again changed a lot. You can now customize
|
||||
the variable `erc-modules' and define once and for all which
|
||||
extension modules you want to use. This unfortunately may require
|
||||
you to change your current erc initialisation code a bit, if you
|
||||
have some existing customsations. On the other hand, this change
|
||||
makes the configuration of extension modules a lot easier for new
|
||||
users. In theory, you should be able to configure all aspects of
|
||||
ERC by using the customize interface, you should no longer really
|
||||
need to write Lisp code for trivial customizations.
|
||||
|
||||
By default, the following modules are now loaded: (pcomplete
|
||||
netsplit fill track ring button autojoin)
|
||||
|
||||
Please use M-x customize-variable RET erc-modules RET to change the
|
||||
default if it does not suite your needs.
|
||||
|
||||
** THe symbol used in `erc-nickserv-passwords' for debian.org IRC servers
|
||||
(formerly called OpenProjects, now FreeNode) has changed from
|
||||
openprojects to freenode. You may need to update your configuration
|
||||
for a successful automatic nickserv identification.
|
||||
|
||||
* Changes in ERC 3.0.cvs.20030119
|
||||
|
||||
** New module erc-dcc:
|
||||
|
||||
This finally implements DCC. It requires server sockets to fully work
|
||||
in both directions. This feature is currently only available in Emacs
|
||||
21.3.50 (CVS). Here is a short list of what should work though.
|
||||
|
||||
** Compatibility:
|
||||
* Emacs 21.2, DCC get, and accepting DCC chat offers.
|
||||
* XEmacs 21, Only accepting DCC chat offers.
|
||||
|
||||
** erc is switching to global-minor-modes for activation of submodules.
|
||||
|
||||
This allows you to customize such a mode and get automatic loading of
|
||||
the module. No longer putting a lot of require statments in .emacs.
|
||||
At least this is the long-term plan, not all modules are converted
|
||||
yet.
|
||||
|
||||
** The most important user visible change is that you now need to activate
|
||||
erc-completion-mode, to get TAB completion. The new completion code
|
||||
is based on pcomplete. To get the old code, manually load
|
||||
erc-complete and bind TAB to erc-complete in erc-mode-map.
|
||||
|
||||
To activate completion on startup, put (erc-completion-mode 1) in your
|
||||
.emacs file.
|
||||
|
||||
Same applies to timestamps. You no longer need to (require
|
||||
'erc-stamp), you can customize the variable `erc-timestamp-mode', and
|
||||
the rest should be automatic.
|
||||
|
||||
arch-tag: 2b21b387-6cdc-4192-889c-6743cfffdcb1
|
||||
114
etc/ETAGS.EBNF
114
etc/ETAGS.EBNF
|
|
@ -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, 2004, 2006
|
||||
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
|
||||
7
etc/FTP
7
etc/FTP
|
|
@ -1,7 +0,0 @@
|
|||
Please refer to <http://www.gnu.org/software/emacs/> for information
|
||||
about obtaining Emacs.
|
||||
|
||||
Copyright (c) 2000, 2006 Free Software Foundation, Inc.
|
||||
|
||||
Verbatim copying and distribution is permitted in any medium
|
||||
provided this notice is preserved.
|
||||
545
etc/GNU
545
etc/GNU
|
|
@ -1,545 +0,0 @@
|
|||
Copyright (C) 1985, 1993, 2002, 2003, 2004,
|
||||
2005, 2006 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.
|
||||
555
etc/GNUS-NEWS
555
etc/GNUS-NEWS
|
|
@ -1,555 +0,0 @@
|
|||
GNUS NEWS -- history of user-visible changes.
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
2005, 2006 Free Software Foundation, Inc.
|
||||
See the end for copying conditions.
|
||||
|
||||
Please send Gnus bug reports to bugs@gnus.org.
|
||||
For older news, see Gnus info node "New Features".
|
||||
|
||||
|
||||
* Changes in Oort Gnus
|
||||
|
||||
** `F' (`gnus-article-followup-with-original') and `R'
|
||||
(`gnus-article-reply-with-original') only yank the text in the region if the
|
||||
region is active.
|
||||
|
||||
** `gnus-group-read-ephemeral-group' can be called interactively, using `G M'.
|
||||
|
||||
** In draft groups, `e' is now bound to `gnus-draft-edit-message'.
|
||||
Use `B w' for `gnus-summary-edit-article' instead.
|
||||
|
||||
** The revised Gnus FAQ is included in the manual.
|
||||
See the info node "Frequently Asked Questions".
|
||||
|
||||
** Upgrading from previous (stable) version if you have used Oort.
|
||||
|
||||
If you have tried Oort (the unstable Gnus branch leading to this
|
||||
release) but went back to a stable version, be careful when upgrading
|
||||
to this version. In particular, you will probably want to remove all
|
||||
.marks (nnml) and .mrk (nnfolder) files, so that flags are read from
|
||||
your ~/.newsrc.eld instead of from the .marks/.mrk file where this
|
||||
release store flags. See a later entry for more information about
|
||||
marks. Note that downgrading isn't safe in general.
|
||||
|
||||
** Article Buttons
|
||||
|
||||
More buttons for URLs, mail addresses, Message-IDs, Info links, man pages and
|
||||
Emacs or Gnus related references, see the info node "Article Buttons". The
|
||||
variables `gnus-button-*-level' can be used to control the appearance of all
|
||||
article buttons, see the info node "Article Button Levels".
|
||||
|
||||
** Dired integration
|
||||
|
||||
`gnus-dired-minor-mode' installs key bindings in dired buffers to send a file
|
||||
as an attachment (`C-c C-m C-a'), open a file using the approriate mailcap
|
||||
entry (`C-c C-m C-l'), and print a file using the mailcap entry (`C-c C-m
|
||||
C-p'). See the info node "Other modes".
|
||||
|
||||
|
||||
** Gnus can display RSS newsfeeds as a newsgroup. To get started do `B
|
||||
nnrss RET RET' in the Group buffer.
|
||||
|
||||
** Single-part yenc encoded attachments can be decoded.
|
||||
|
||||
** Picons
|
||||
The picons code has been reimplemented to work in Emacs 21 -- some of
|
||||
the previous options have been removed or renamed.
|
||||
|
||||
Picons are small "personal icons" representing users, domain and
|
||||
newsgroups, which can be displayed in the Article buffer. To enable
|
||||
picons, install the picons database from
|
||||
|
||||
http://www.cs.indiana.edu/picons/ftp/index.html
|
||||
|
||||
and point `gnus-picon-databases' to that location.
|
||||
|
||||
** If the new option `gnus-treat-body-boundary' is `head', a boundary
|
||||
line is drawn at the end of the headers.
|
||||
|
||||
** Retrieval of charters and control messages
|
||||
There are new commands for fetching newsgroup charters (`H c') and
|
||||
control messages (`H C').
|
||||
|
||||
** Delayed articles
|
||||
You can delay the sending of a message with `C-c C-j' in the Message
|
||||
buffer. The messages are delivered at specified time. This is useful
|
||||
for sending yourself reminders. Setup with (gnus-delay-initialize).
|
||||
|
||||
** If `auto-compression-mode' is enabled, attachments are automatically
|
||||
decompressed when activated.
|
||||
|
||||
** If the new option `nnml-use-compressed-files' is non-nil,
|
||||
the nnml back end allows compressed message files.
|
||||
|
||||
** Signed article headers (X-PGP-Sig) can be verified with `W p'.
|
||||
|
||||
** The Summary Buffer uses an arrow in the fringe to indicate the
|
||||
current article in Emacs 21 running on a graphical display. Customize
|
||||
`gnus-summary-display-arrow' to disable it.
|
||||
|
||||
** Warn about email replies to news
|
||||
Do you often find yourself replying to news by email by mistake? Then
|
||||
the new option `gnus-confirm-mail-reply-to-news' is just the thing for
|
||||
you.
|
||||
|
||||
** If the new option `gnus-summary-display-while-building' is non-nil,
|
||||
the summary buffer is shown and updated as it's being built.
|
||||
|
||||
** The new `recent' mark "." indicates newly arrived messages (as
|
||||
opposed to old but unread messages).
|
||||
|
||||
** The new option `gnus-gcc-mark-as-read' automatically marks
|
||||
Gcc articles as read.
|
||||
|
||||
** The nndoc back end now supports mailman digests and exim bounces.
|
||||
|
||||
** Gnus supports RFC 2369 mailing list headers, and adds a number of
|
||||
related commands in mailing list groups.
|
||||
|
||||
** The Date header can be displayed in a format that can be read aloud
|
||||
in English, see `gnus-treat-date-english'.
|
||||
|
||||
** The envelope sender address can be customized when using Sendmail, see
|
||||
`message-sendmail-envelope-from'.
|
||||
|
||||
** diffs are automatically highlighted in groups matching
|
||||
`mm-uu-diff-groups-regexp'
|
||||
|
||||
** TLS wrapper shipped with Gnus
|
||||
|
||||
TLS/SSL is now supported in IMAP and NNTP via tls.el and GNUTLS. The
|
||||
old TLS/SSL support via (external third party) ssl.el and OpenSSL
|
||||
still works.
|
||||
|
||||
** New make.bat for compiling and installing Gnus under MS Windows
|
||||
|
||||
Use make.bat if you want to install Gnus under MS Windows, the first
|
||||
argument to the batch-program should be the directory where xemacs.exe
|
||||
respectively emacs.exe is located, iff you want to install Gnus after
|
||||
compiling it, give make.bat /copy as the second parameter.
|
||||
|
||||
`make.bat' has been rewritten from scratch, it now features automatic
|
||||
recognition of XEmacs and GNU Emacs, generates gnus-load.el, checks if
|
||||
errors occur while compilation and generation of info files and reports
|
||||
them at the end of the build process. It now uses makeinfo if it is
|
||||
available and falls back to infohack.el otherwise. `make.bat' should now
|
||||
install all files which are necessary to run Gnus and be generally a
|
||||
complete replacement for the "configure; make; make install" cycle used
|
||||
under Unix systems.
|
||||
|
||||
The new make.bat makes make-x.bat superfluous, so it has been removed.
|
||||
|
||||
** Support for non-ASCII domain names
|
||||
|
||||
Message supports non-ASCII domain names in From:, To: and Cc: and will
|
||||
encode them when you try to send a message. The variable
|
||||
`message-use-idna' controls this. Gnus will also decode non-ASCII
|
||||
domain names in From:, To: and Cc: when you view a message. The
|
||||
variable `gnus-use-idna' controls this.
|
||||
|
||||
** Better handling of Microsoft citation styles
|
||||
|
||||
Gnus now tries to recognize the mangled header block that some Microsoft
|
||||
mailers use to indicate that the rest of the message is a citation, even
|
||||
though it is not quoted in any way. The variable
|
||||
`gnus-cite-unsightly-citation-regexp' matches the start of these
|
||||
citations.
|
||||
|
||||
** gnus-article-skip-boring
|
||||
|
||||
If you set `gnus-article-skip-boring' to t, then Gnus will not scroll
|
||||
down to show you a page that contains only boring text, which by
|
||||
default means cited text and signature. You can customize what is
|
||||
skippable using `gnus-article-boring-faces'.
|
||||
|
||||
This feature is especially useful if you read many articles that
|
||||
consist of a little new content at the top with a long, untrimmed
|
||||
message cited below.
|
||||
|
||||
** The format spec %C for positioning point has changed to %*.
|
||||
|
||||
** The new variable `gnus-parameters' can be used to set group parameters.
|
||||
|
||||
Earlier this was done only via `G p' (or `G c'), which stored the
|
||||
parameters in ~/.newsrc.eld, but via this variable you can enjoy the
|
||||
powers of customize, and simplified backups since you set the variable
|
||||
in ~/.emacs instead of ~/.newsrc.eld. The variable maps regular
|
||||
expressions matching group names to group parameters, a'la:
|
||||
|
||||
(setq gnus-parameters
|
||||
'(("mail\\..*"
|
||||
(gnus-show-threads nil)
|
||||
(gnus-use-scoring nil))
|
||||
("^nnimap:\\(foo.bar\\)$"
|
||||
(to-group . "\\1"))))
|
||||
|
||||
** Smileys (":-)", ";-)" etc) are now iconized for Emacs too.
|
||||
|
||||
Customize `gnus-treat-display-smileys' to disable it.
|
||||
|
||||
** Gnus no longer generates the Sender: header automatically.
|
||||
|
||||
Earlier it was generated iff the user configurable email address was
|
||||
different from the Gnus guessed default user address. As the guessing
|
||||
algorithm is rarely correct these days, and (more controversially) the
|
||||
only use of the Sender: header was to check if you are entitled to
|
||||
cancel/supersede news (which is now solved by Cancel Locks instead,
|
||||
see another entry), generation of the header has been disabled by
|
||||
default. See the variables `message-required-headers',
|
||||
`message-required-news-headers', and `message-required-mail-headers'.
|
||||
|
||||
** Features from third party message-utils.el added to message.el.
|
||||
|
||||
Message now asks if you wish to remove "(was: <old subject>)" from
|
||||
subject lines (see `message-subject-trailing-was-query'). C-c M-m and
|
||||
C-c M-f inserts markers indicating included text. C-c C-f a adds a
|
||||
X-No-Archive: header. C-c C-f x inserts appropriate headers and a
|
||||
note in the body for cross-postings and followups (see the variables
|
||||
`message-cross-post-*').
|
||||
|
||||
** References and X-Draft-Headers are no longer generated when you
|
||||
start composing messages and `message-generate-headers-first' is nil.
|
||||
|
||||
** Improved anti-spam features.
|
||||
|
||||
Gnus is now able to take out spam from your mail and news streams
|
||||
using a wide variety of programs and filter rules. Among the supported
|
||||
methods are RBL blocklists, bogofilter and white/blacklists. Hooks
|
||||
for easy use of external packages such as SpamAssassin and Hashcash
|
||||
are also new.
|
||||
|
||||
** Easy inclusion of X-Faces headers.
|
||||
|
||||
** In the summary buffer, the new command / N inserts new messages and
|
||||
/ o inserts old messages.
|
||||
|
||||
** Gnus decodes morse encoded messages if you press W m.
|
||||
|
||||
** Unread count correct in nnimap groups.
|
||||
|
||||
The estimated number of unread articles in the group buffer should now
|
||||
be correct for nnimap groups. This is achieved by calling
|
||||
`nnimap-fixup-unread-after-getting-new-news' from the
|
||||
`gnus-setup-news-hook' (called on startup) and
|
||||
`gnus-after-getting-new-news-hook' (called after getting new mail).
|
||||
If you have modified those variables from the default, you may want to
|
||||
add n-f-u-a-g-n-n again. If you were happy with the estimate and want
|
||||
to save some (minimal) time when getting new mail, remove the
|
||||
function.
|
||||
|
||||
** Group Carbon Copy (GCC) quoting
|
||||
|
||||
To support groups that contains SPC and other weird characters, groups
|
||||
are quoted before they are placed in the Gcc: header. This means
|
||||
variables such as `gnus-message-archive-group' should no longer
|
||||
contain quote characters to make groups containing SPC work. Also, if
|
||||
you are using the string "nnml:foo, nnml:bar" (indicating Gcc into two
|
||||
groups) you must change it to return the list ("nnml:foo" "nnml:bar"),
|
||||
otherwise the Gcc: line will be quoted incorrectly. Note that
|
||||
returning the string "nnml:foo, nnml:bar" was incorrect earlier, it
|
||||
just didn't generate any problems since it was inserted directly.
|
||||
|
||||
** ~/News/overview/ not used.
|
||||
|
||||
As a result of the following change, the ~/News/overview/ directory is
|
||||
not used any more. You can safely delete the entire hierarchy.
|
||||
|
||||
** gnus-agent
|
||||
|
||||
The Gnus Agent has seen a major update. It is now enabled by default,
|
||||
and all nntp and nnimap servers from `gnus-select-method' and
|
||||
`gnus-secondary-select-method' are agentized by default. Earlier only
|
||||
the server in `gnus-select-method' was agentized by the default, and the
|
||||
agent was disabled by default. When the agent is enabled, headers are
|
||||
now also retrieved from the Agent cache instead of the backends when
|
||||
possible. Earlier this only happened in the unplugged state. You can
|
||||
enroll or remove servers with `J a' and `J r' in the server buffer.
|
||||
Gnus will not download articles into the Agent cache, unless you
|
||||
instruct it to do so, though, by using `J u' or `J s' from the Group
|
||||
buffer. You revert to the old behaviour of having the Agent disabled
|
||||
by customizing `gnus-agent'. Note that putting `(gnus-agentize)' in
|
||||
~/.gnus is not needed any more.
|
||||
|
||||
** gnus-summary-line-format
|
||||
|
||||
The default value changed to "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n".
|
||||
Moreover `gnus-extra-headers', `nnmail-extra-headers' and
|
||||
`gnus-ignored-from-addresses' changed their default so that the users
|
||||
name will be replaced by the recipient's name or the group name
|
||||
posting to for NNTP groups.
|
||||
|
||||
** deuglify.el (gnus-article-outlook-deuglify-article)
|
||||
|
||||
A new file from Raymond Scholz <rscholz@zonix.de> for deuglifying
|
||||
broken Outlook (Express) articles.
|
||||
|
||||
** (require 'gnus-load)
|
||||
|
||||
If you use a stand-alone Gnus distribution, you'd better add
|
||||
"(require 'gnus-load)" to your ~/.emacs after adding the Gnus
|
||||
lisp directory into load-path.
|
||||
|
||||
File gnus-load.el contains autoload commands, functions and variables,
|
||||
some of which may not be included in distributions of Emacsen.
|
||||
|
||||
** gnus-slave-unplugged
|
||||
|
||||
A new command which starts gnus offline in slave mode.
|
||||
|
||||
** message-insinuate-rmail
|
||||
|
||||
Adding (message-insinuate-rmail) in .emacs and customizing
|
||||
`mail-user-agent' to `gnus-user-agent' convinces Rmail to compose,
|
||||
reply and forward messages in Message mode, where you can enjoy the
|
||||
power of MML.
|
||||
|
||||
** message-minibuffer-local-map
|
||||
|
||||
The line below enables BBDB in resending a message:
|
||||
|
||||
(define-key message-minibuffer-local-map [?\t] 'bbdb-complete-name)
|
||||
|
||||
** Externalizing and deleting of attachments.
|
||||
|
||||
If `gnus-gcc-externalize-attachments' (or
|
||||
`message-fcc-externalize-attachments') is non-nil, attach local files
|
||||
as external parts.
|
||||
|
||||
The command `gnus-mime-save-part-and-strip' (bound to `C-o' on MIME
|
||||
buttons) saves a part and replaces the part with an external one.
|
||||
`gnus-mime-delete-part' (bound to `d' on MIME buttons) removes a part.
|
||||
It works only on back ends that support editing.
|
||||
|
||||
** gnus-default-charset
|
||||
|
||||
The default value now guesses on the basis of your environment instead
|
||||
of using Latin-1. Also the ".*" item in gnus-group-charset-alist is
|
||||
removed.
|
||||
|
||||
** gnus-posting-styles
|
||||
|
||||
Add a new format of match like
|
||||
|
||||
((header "to" "larsi.*org")
|
||||
(Organization "Somewhere, Inc."))
|
||||
|
||||
The old format like the lines below is obsolete, but still accepted.
|
||||
|
||||
(header "to" "larsi.*org"
|
||||
(Organization "Somewhere, Inc."))
|
||||
|
||||
** message-ignored-news-headers and message-ignored-mail-headers
|
||||
|
||||
X-Draft-From and X-Gnus-Agent-Meta-Information have been added into
|
||||
these two variables. If you customized those, perhaps you need add
|
||||
those two headers too.
|
||||
|
||||
** Gnus reads the NOV and articles in the Agent if plugged.
|
||||
|
||||
If one reads an article while plugged, and the article already exists
|
||||
in the Agent, it won't get downloaded once more. Customize
|
||||
`gnus-agent-cache' to revert to the old behavior.
|
||||
|
||||
** Gnus supports the "format=flowed" (RFC 2646) parameter.
|
||||
|
||||
On composing messages, it is enabled by `use-hard-newlines'. Decoding
|
||||
format=flowed was present but not documented in earlier versions.
|
||||
|
||||
** 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.8)
|
||||
|
||||
** The tool bar icons are now (de)activated correctly in the group
|
||||
buffer, see the variable `gnus-group-update-tool-bar'. It's default
|
||||
value depends on your Emacs version. (New in Gnus 5.10.8)
|
||||
|
||||
** Gnus supports the generation of RFC 2298 Disposition Notification requests.
|
||||
|
||||
This is invoked with the C-c M-n key binding from message mode.
|
||||
|
||||
** Gnus supports Maildir groups.
|
||||
|
||||
Gnus includes a new backend nnmaildir.el.
|
||||
|
||||
** Printing capabilities are enhanced.
|
||||
|
||||
Gnus supports Muttprint natively with O P from the Summary and Article
|
||||
buffers. Also, each individual MIME part can be printed using p on
|
||||
the MIME button.
|
||||
|
||||
** Message supports the Importance: (RFC 2156) header.
|
||||
|
||||
In the message buffer, `C-c C-f C-i' or `C-c C-u' cycles through the
|
||||
valid values.
|
||||
|
||||
** Gnus supports Cancel Locks in News.
|
||||
|
||||
This means a header "Cancel-Lock" is inserted in news posting. It is
|
||||
used to determine if you wrote a article or not (for cancelling and
|
||||
superseding). Gnus generates a random password string the first time
|
||||
you post a message, and saves it using the Custom system. While the
|
||||
variable is called `canlock-password', it is not security sensitive
|
||||
data. Publishing your canlock string on the web will not allow anyone
|
||||
to be able to anything she could not already do. The behaviour can be
|
||||
changed by customizing `message-insert-canlock'.
|
||||
|
||||
** Gnus supports server-side mail filtering using Sieve.
|
||||
|
||||
Sieve rules can be added as Group Parameters for groups, and the
|
||||
complete Sieve script is generated using `D g' from the Group buffer,
|
||||
and then uploaded to the server using `C-c C-l' in the generated Sieve
|
||||
buffer. Search the online Gnus manual for "sieve", and see the new
|
||||
Sieve manual, for more information.
|
||||
|
||||
** Extended format specs.
|
||||
|
||||
Format spec "%&user-date;" is added into
|
||||
`gnus-summary-line-format-alist'. Also, user defined extended format
|
||||
specs are supported. The extended format specs look like "%u&foo;",
|
||||
which invokes function `gnus-user-format-function-foo'. Because "&" is
|
||||
used as the escape character, old user defined format "%u&" is no
|
||||
longer supported.
|
||||
|
||||
** `/ *' (gnus-summary-limit-include-cached) is rewritten.
|
||||
|
||||
It was aliased to `Y c' (gnus-summary-insert-cached-articles). The new
|
||||
function filters out other articles.
|
||||
|
||||
** Some limiting commands accept a C-u prefix to negate the match.
|
||||
|
||||
If C-u is used on subject, author or extra headers, i.e., `/ s', `/
|
||||
a', and `/ x' (gnus-summary-limit-to-{subject,author,extra})
|
||||
respectively, the result will be to display all articles that do not
|
||||
match the expression.
|
||||
|
||||
** Group names are treated as UTF-8 by default.
|
||||
|
||||
This is supposedly what USEFOR wanted to migrate to. See
|
||||
`gnus-group-name-charset-group-alist' and
|
||||
`gnus-group-name-charset-method-alist' for customization.
|
||||
|
||||
** The nnml and nnfolder backends store marks for each group.
|
||||
|
||||
This makes it possible to take backup of nnml/nnfolder servers/groups
|
||||
separately of ~/.newsrc.eld, while preserving marks. It also makes it
|
||||
possible to share articles and marks between users (without sharing
|
||||
the ~/.newsrc.eld file) within e.g. a department. It works by storing
|
||||
the marks stored in ~/.newsrc.eld in a per-group file ".marks" (for
|
||||
nnml) and "groupname.mrk" (for nnfolder, named "groupname"). If the
|
||||
nnml/nnfolder is moved to another machine, Gnus will automatically use
|
||||
the .marks or .mrk file instead of the information in ~/.newsrc.eld.
|
||||
The new server variables `nnml-marks-is-evil' and
|
||||
`nnfolder-marks-is-evil' can be used to disable this feature.
|
||||
|
||||
** The menu bar item (in Group and Summary buffer) named "Misc" has
|
||||
been renamed to "Gnus".
|
||||
|
||||
** The menu bar item (in Message mode) named "MML" has been renamed to
|
||||
"Attachments". Note that this menu also contains security related
|
||||
stuff, like signing and encryption.
|
||||
|
||||
** gnus-group-charset-alist and gnus-group-ignored-charsets-alist.
|
||||
|
||||
The regexps in these variables are compared with full group names
|
||||
instead of real group names in 5.8. Users who customize these
|
||||
variables should change those regexps accordingly. For example:
|
||||
|
||||
("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr)
|
||||
|
||||
** Gnus supports PGP (RFC 1991/2440), PGP/MIME (RFC 2015/3156) and
|
||||
S/MIME (RFC 2630-2633).
|
||||
|
||||
It needs an external S/MIME and OpenPGP implementation, but no
|
||||
additional lisp libraries. This add several menu items to the
|
||||
Attachments menu, and C-c RET key bindings, when composing messages.
|
||||
This also obsoletes `gnus-article-hide-pgp-hook'.
|
||||
|
||||
** Gnus inlines external parts (message/external).
|
||||
|
||||
** MML (Mime compose) prefix changed from `M-m' to `C-c C-m'.
|
||||
|
||||
This change was made to avoid conflict with the standard binding of
|
||||
`back-to-indentation', which is also useful in message mode.
|
||||
|
||||
** The default for message-forward-show-mml changed to symbol best.
|
||||
|
||||
The behaviour for the `best' value is to show MML (i.e., convert MIME
|
||||
to MML) when appropriate. MML will not be used when forwarding signed
|
||||
or encrypted messages, as the conversion invalidate the digital
|
||||
signature.
|
||||
|
||||
** Bug fixes.
|
||||
|
||||
|
||||
* Changes in Pterodactyl Gnus (5.8/5.9)
|
||||
|
||||
The Gnus NEWS entries are short, but they reflect sweeping changes in
|
||||
four areas: Article display treatment, MIME treatment,
|
||||
internationalization and mail-fetching.
|
||||
|
||||
** The mail-fetching functions have changed. See the manual for the
|
||||
many details. In particular, all procmail fetching variables are gone.
|
||||
|
||||
If you used procmail like in
|
||||
|
||||
(setq nnmail-use-procmail t)
|
||||
(setq nnmail-spool-file 'procmail)
|
||||
(setq nnmail-procmail-directory "~/mail/incoming/")
|
||||
(setq nnmail-procmail-suffix "\\.in")
|
||||
|
||||
this now has changed to
|
||||
|
||||
(setq mail-sources
|
||||
'((directory :path "~/mail/incoming/"
|
||||
:suffix ".in")))
|
||||
|
||||
More information is available in the info doc at Select Methods ->
|
||||
Getting Mail -> Mail Sources
|
||||
|
||||
** Gnus is now a MIME-capable reader. This affects many parts of
|
||||
Gnus, and adds a slew of new commands. See the manual for details.
|
||||
|
||||
** Gnus has also been multilingualized. This also affects too
|
||||
many parts of Gnus to summarize here, and adds many new variables.
|
||||
|
||||
** gnus-auto-select-first can now be a function to be
|
||||
called to position point.
|
||||
|
||||
** The user can now decide which extra headers should be included in
|
||||
summary buffers and NOV files.
|
||||
|
||||
** `gnus-article-display-hook' has been removed. Instead, a number
|
||||
of variables starting with `gnus-treat-' have been added.
|
||||
|
||||
** The Gnus posting styles have been redone again and now works in a
|
||||
subtly different manner.
|
||||
|
||||
** New web-based backends have been added: nnslashdot, nnwarchive
|
||||
and nnultimate. nnweb has been revamped, again, to keep up with
|
||||
ever-changing layouts.
|
||||
|
||||
** Gnus can now read IMAP mail via nnimap.
|
||||
|
||||
|
||||
* For older news, see Gnus info node "New Features".
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Copyright information:
|
||||
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to anyone to make or distribute verbatim copies
|
||||
of this document as received, in any medium, provided that the
|
||||
copyright notice and this permission notice are preserved,
|
||||
thus giving the recipient permission to redistribute in turn.
|
||||
|
||||
Permission is granted to distribute modified versions
|
||||
of this document, or of portions of it,
|
||||
under the above conditions, provided also that they
|
||||
carry prominent notices stating who last changed them.
|
||||
|
||||
Local variables:
|
||||
mode: outline
|
||||
paragraph-separate: "[ ]*$"
|
||||
end:
|
||||
88
etc/HELLO
88
etc/HELLO
|
|
@ -1,88 +0,0 @@
|
|||
This is a list of ways to say hello in various languages.
|
||||
|
||||
Non-ASCII examples:
|
||||
Europe: ,A!(BHola!, Hyv,Add(B p,Ad(Biv,Add(B, Gr,A|_(B Gott, Bon,Cu(Bu, Dobr,B}(B den, Tere p,Ad(Bevast
|
||||
Cze,B6f(B!, ,FCei\(B ,Fsar(B, ,L7T`PRabRcYbU(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 (??) 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
|
||||
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
|
||||
|
||||
|
||||
;;; Local Variables:
|
||||
;;; tab-width: 32
|
||||
;;; End:
|
||||
442
etc/INTERVIEW
442
etc/INTERVIEW
|
|
@ -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.
|
||||
642
etc/JOKES
642
etc/JOKES
|
|
@ -1,642 +0,0 @@
|
|||
From: Don Chiasson <G.CHIASSON@DREA-XX.ARPA>
|
||||
Subject: Some gnu jokes
|
||||
To: jokes@DREA-XX.ARPA, gergely@DREA-XX.ARPA, broome@DREA-XX.ARPA
|
||||
cc: G.CHIASSON@DREA-XX.ARPA
|
||||
Message-ID: <12329394624.13.G.CHIASSON@DREA-XX.ARPA>
|
||||
|
||||
Richard M. Stallman (RMS, widely known for creating EMACS) is writing
|
||||
a UNIX clone called GNU (which means Gnu's Not Unix--a recursive acronym).
|
||||
This seems to open the way to a whole gnu class of jokes. For example:
|
||||
|
||||
Q: What do you call a person who hacks while wearing no clothes?
|
||||
A: A gnudist.
|
||||
|
||||
Q: What do you call an eligible young hacker?
|
||||
A: Gnubile.
|
||||
|
||||
Q: What is a hacker's favorite candy?
|
||||
A: Gnugat. (Though it contains little gnutrition.)
|
||||
|
||||
Q: What do you call a computer filled with air?
|
||||
A: Gnumatic.
|
||||
|
||||
Q: What do you call a novice hacker who keeps pestering you
|
||||
with foolish questions?
|
||||
A: A gnuisance.
|
||||
|
||||
Q: What do you call a subtle, clever hack in the favorite language?
|
||||
A: A gnuanCe.
|
||||
|
||||
Q: What do you use a supercomputer for?
|
||||
A: Gnumerical analysis.
|
||||
|
||||
Q: What do you call a hacker who collects coins?
|
||||
A: A gnumismatist.
|
||||
|
||||
Well, there are more, just too gnumerous to tell all at once. I think
|
||||
I'd better go before someone starts firing gnuclear weapons at me.
|
||||
Don
|
||||
|
||||
From: patl@athena.mit.edu (Patrick J. LoPresti)
|
||||
Message-ID: <1991Jul11.031731.9260@athena.mit.edu>
|
||||
Sender: news@athena.mit.edu (News system)
|
||||
Subject: The True Path (long)
|
||||
Date: 11 Jul 91 03:17:31 GMT
|
||||
Path: ai-lab!mintaka!olivea!samsung!zaphod.mps.ohio-state.edu!think.com!snorkelwacker.mit.edu!bloom-picayune.mit.edu!athena.mit.edu!patl
|
||||
Newsgroups: alt.religion.emacs,alt.slack
|
||||
Organization: Massachusetts Institute of Technology
|
||||
Lines: 95
|
||||
Xref: ai-lab alt.religion.emacs:244 alt.slack:1935
|
||||
|
||||
When I log into my Xenix system with my 110 baud teletype, both vi
|
||||
*and* Emacs are just too damn slow. They print useless messages like,
|
||||
'C-h for help' and '"foo" File is read only'. So I use the editor
|
||||
that doesn't waste my VALUABLE time.
|
||||
|
||||
Ed, man! !man ed
|
||||
|
||||
ED(1) UNIX Programmer's Manual ED(1)
|
||||
|
||||
NAME
|
||||
ed - text editor
|
||||
|
||||
SYNOPSIS
|
||||
ed [ - ] [ -x ] [ name ]
|
||||
DESCRIPTION
|
||||
Ed is the standard text editor.
|
||||
---
|
||||
|
||||
Computer Scientists love ed, not just because it comes first
|
||||
alphabetically, but because it's the standard. Everyone else loves ed
|
||||
because it's ED!
|
||||
|
||||
"Ed is the standard text editor."
|
||||
|
||||
And ed doesn't waste space on my Timex Sinclair. Just look:
|
||||
|
||||
-rwxr-xr-x 1 root 24 Oct 29 1929 /bin/ed
|
||||
-rwxr-xr-t 4 root 1310720 Jan 1 1970 /usr/ucb/vi
|
||||
-rwxr-xr-x 1 root 5.89824e37 Oct 22 1990 /usr/bin/emacs
|
||||
|
||||
Of course, on the system *I* administrate, vi is symlinked to ed.
|
||||
Emacs has been replaced by a shell script which 1) Generates a syslog
|
||||
message at level LOG_EMERG; 2) reduces the user's disk quota by 100K;
|
||||
and 3) RUNS ED!!!!!!
|
||||
|
||||
"Ed is the standard text editor."
|
||||
|
||||
Let's look at a typical novice's session with the mighty ed:
|
||||
|
||||
golem> ed
|
||||
|
||||
?
|
||||
help
|
||||
?
|
||||
?
|
||||
?
|
||||
quit
|
||||
?
|
||||
exit
|
||||
?
|
||||
bye
|
||||
?
|
||||
hello?
|
||||
?
|
||||
eat flaming death
|
||||
?
|
||||
^C
|
||||
?
|
||||
^C
|
||||
?
|
||||
^D
|
||||
?
|
||||
|
||||
---
|
||||
Note the consistent user interface and error reportage. Ed is
|
||||
generous enough to flag errors, yet prudent enough not to overwhelm
|
||||
the novice with verbosity.
|
||||
|
||||
"Ed is the standard text editor."
|
||||
|
||||
Ed, the greatest WYGIWYG editor of all.
|
||||
|
||||
ED IS THE TRUE PATH TO NIRVANA! ED HAS BEEN THE CHOICE OF EDUCATED
|
||||
AND IGNORANT ALIKE FOR CENTURIES! ED WILL NOT CORRUPT YOUR PRECIOUS
|
||||
BODILY FLUIDS!! ED IS THE STANDARD TEXT EDITOR! ED MAKES THE SUN
|
||||
SHINE AND THE BIRDS SING AND THE GRASS GREEN!!
|
||||
|
||||
When I use an editor, I don't want eight extra KILOBYTES of worthless
|
||||
help screens and cursor positioning code! I just want an EDitor!!
|
||||
Not a "viitor". Not a "emacsitor". Those aren't even WORDS!!!! ED!
|
||||
ED! ED IS THE STANDARD!!!
|
||||
|
||||
TEXT EDITOR.
|
||||
|
||||
When IBM, in its ever-present omnipotence, needed to base their
|
||||
"edlin" on a UNIX standard, did they mimic vi? No. Emacs? Surely
|
||||
you jest. They chose the most karmic editor of all. The standard.
|
||||
|
||||
Ed is for those who can *remember* what they are working on. If you
|
||||
are an idiot, you should use Emacs. If you are an Emacs, you should
|
||||
not be vi. If you use ED, you are on THE PATH TO REDEMPTION. THE
|
||||
SO-CALLED "VISUAL" EDITORS HAVE BEEN PLACED HERE BY ED TO TEMPT THE
|
||||
FAITHLESS. DO NOT GIVE IN!!! THE MIGHTY ED HAS SPOKEN!!!
|
||||
|
||||
?
|
||||
|
||||
From: The Unknown User <anonymous@nowhere.uucp>
|
||||
Subject: EMACS -- What does it mean?
|
||||
To: mit-prep!info-gnu-emacs@TOPAZ.RUTGERS.EDU
|
||||
|
||||
EMACS belongs in <sys/errno.h>: Editor too big!
|
||||
|
||||
|
||||
Escape-Meta-Alt-Control-Shift
|
||||
|
||||
|
||||
From: harvard!topaz!BLUE!BRAIL@mit-eddie
|
||||
Date: 9 Sep 85 17:25:27 EDT
|
||||
Subject: EMACS -- What does it mean?
|
||||
To: mit-prep!info-gnu-emacs@TOPAZ.RUTGERS.EDU
|
||||
|
||||
EMACS may stand for "Editing MACroS," but some friends of mine
|
||||
suggested some more creative definitions. Here they are. Anyone have
|
||||
any additions?
|
||||
|
||||
--------
|
||||
Eight
|
||||
Megabytes
|
||||
And
|
||||
Constantly
|
||||
Swapping
|
||||
|
||||
Even a
|
||||
Master of
|
||||
Arts
|
||||
Comes
|
||||
Simpler
|
||||
|
||||
Emacs
|
||||
Manuals
|
||||
Are
|
||||
Cryptic and
|
||||
Surreal
|
||||
|
||||
Energetic
|
||||
Merchants
|
||||
Always
|
||||
Cultivate
|
||||
Sales
|
||||
|
||||
Each
|
||||
Manual's
|
||||
Audience is
|
||||
Completely
|
||||
Stupified
|
||||
|
||||
Emacs
|
||||
Means
|
||||
A
|
||||
Crappy
|
||||
Screen
|
||||
|
||||
Eventually
|
||||
Munches
|
||||
All
|
||||
Computer
|
||||
Storage
|
||||
|
||||
Even
|
||||
My
|
||||
Aunt
|
||||
Crashes the
|
||||
System
|
||||
|
||||
Eradication of
|
||||
Memory
|
||||
Accomplished with
|
||||
Complete
|
||||
Simplicity
|
||||
|
||||
Elsewhere
|
||||
Maybe
|
||||
Alternative
|
||||
Civilizations
|
||||
Survive
|
||||
|
||||
Egregious
|
||||
Managers
|
||||
Actively
|
||||
Court
|
||||
Stallman
|
||||
|
||||
Esoteric
|
||||
Malleability
|
||||
Always
|
||||
Considered
|
||||
Silly
|
||||
|
||||
Emacs
|
||||
Manuals
|
||||
Always
|
||||
Cause
|
||||
Senility
|
||||
|
||||
Easily
|
||||
Maintained with the
|
||||
Assistance of
|
||||
Chemical
|
||||
Solutions
|
||||
|
||||
EMACS
|
||||
MACRO
|
||||
ACTED
|
||||
CREDO
|
||||
SODOM
|
||||
|
||||
Edwardian
|
||||
Manifestation of
|
||||
All
|
||||
Colonial
|
||||
Sins
|
||||
|
||||
Generally
|
||||
Not
|
||||
Used
|
||||
|
||||
Except by
|
||||
Middle
|
||||
Aged
|
||||
Computer
|
||||
Scientists
|
||||
|
||||
Extended
|
||||
Macros
|
||||
Are
|
||||
Considered
|
||||
Superfluous
|
||||
|
||||
Every
|
||||
Mode
|
||||
Accelerates
|
||||
Creation of
|
||||
Software
|
||||
|
||||
Elsewhere
|
||||
Maybe
|
||||
All
|
||||
Commands are
|
||||
Simple
|
||||
|
||||
Emacs
|
||||
May
|
||||
Allow
|
||||
Customized
|
||||
Screwups
|
||||
|
||||
Excellent
|
||||
Manuals
|
||||
Are
|
||||
Clearly
|
||||
Suppressed
|
||||
|
||||
Emetic
|
||||
Macros
|
||||
Assault
|
||||
Core and
|
||||
Segmentation
|
||||
|
||||
Embarrassed
|
||||
Manual-Writer
|
||||
Accused of
|
||||
Communist
|
||||
Subversion
|
||||
|
||||
Extensibility and
|
||||
Modifiability
|
||||
Aggravate
|
||||
Confirmed
|
||||
Simpletons
|
||||
|
||||
Emacs
|
||||
May
|
||||
Annihilate
|
||||
Command
|
||||
Structures
|
||||
|
||||
Easily
|
||||
Mangles,
|
||||
Aborts,
|
||||
Crashes and
|
||||
Stupifies
|
||||
|
||||
Extraneous
|
||||
Macros
|
||||
And
|
||||
Commands
|
||||
Stink
|
||||
|
||||
Exceptionally
|
||||
Mediocre
|
||||
Algorithm for
|
||||
Computer
|
||||
Scientists
|
||||
|
||||
EMACS
|
||||
Makes no
|
||||
Allowances
|
||||
Considering its
|
||||
Stiff price
|
||||
|
||||
Equine
|
||||
Mammals
|
||||
Are
|
||||
Considerably
|
||||
Smaller
|
||||
|
||||
Embarrassingly
|
||||
Mundane
|
||||
Advertising
|
||||
Cuts
|
||||
Sales
|
||||
|
||||
Every
|
||||
Moron
|
||||
Assumes
|
||||
CCA is
|
||||
Superior
|
||||
|
||||
Exceptionally
|
||||
Mediocre
|
||||
Autocratic
|
||||
Control
|
||||
System
|
||||
|
||||
EMACS
|
||||
May
|
||||
Alienate
|
||||
Clients and
|
||||
Supporters
|
||||
|
||||
Excavating
|
||||
Mayan
|
||||
Architecture
|
||||
Comes
|
||||
Simpler
|
||||
|
||||
Erasing
|
||||
Minds
|
||||
Allows
|
||||
Complete
|
||||
Submission
|
||||
|
||||
Every
|
||||
Male
|
||||
Adolescent
|
||||
Craves
|
||||
Sex
|
||||
|
||||
Elephantine
|
||||
Memory
|
||||
Absolutely
|
||||
Considered
|
||||
Sine que non
|
||||
|
||||
Emacs
|
||||
Makers
|
||||
Are
|
||||
Crazy
|
||||
Sickos
|
||||
|
||||
Eenie-Meenie-Miney-Mo-
|
||||
Macros
|
||||
Are
|
||||
Completely
|
||||
Slow
|
||||
|
||||
Experience the
|
||||
Mildest
|
||||
Ad
|
||||
Campaign ever
|
||||
Seen
|
||||
|
||||
Emacs
|
||||
Makefiles
|
||||
Annihilate
|
||||
C-
|
||||
Shells
|
||||
|
||||
Eradication of
|
||||
Memory
|
||||
Accomplished with
|
||||
Complete
|
||||
Simplicity
|
||||
|
||||
Emetic
|
||||
Macros
|
||||
Assault
|
||||
Core and
|
||||
Segmentation
|
||||
|
||||
Epileptic
|
||||
MLisp
|
||||
Aggravates
|
||||
Compiler
|
||||
Seizures
|
||||
|
||||
Eleven thousand
|
||||
Monkeys
|
||||
Asynchronously
|
||||
Crank out these
|
||||
Slogans
|
||||
-------
|
||||
|
||||
|
||||
From: ihnss!warren@mit-eddie (Warren Montgomery)
|
||||
Newsgroups: net.emacs
|
||||
Subject: Re: EMACS -- What does it mean?
|
||||
Date: Tue, 10-Sep-85 09:14:24 EDT
|
||||
Organization: AT&T Bell Labs, Naperville, IL
|
||||
Apparently-To: emacs-netnews-distribution@mit-prep
|
||||
|
||||
Someone at a luncheon suggested it meant:
|
||||
|
||||
Evenings,
|
||||
Mornings,
|
||||
And a
|
||||
Couple of
|
||||
Saturdays
|
||||
|
||||
(In reference to the odd hours that went into the creation of my
|
||||
implementation).
|
||||
|
||||
--
|
||||
|
||||
Warren Montgomery
|
||||
ihnss!warren
|
||||
IH ((312)-979) x2494
|
||||
|
||||
Date: Wed, 18 Sep 85 10:11:04 edt
|
||||
From: inmet!tower@inmet.inmet (Leonard H. Tower Jr.) <inmet!tower@cca-unix>
|
||||
Subject: Re: EMACS -- What does it mean?
|
||||
To: tower@MIT-PREP.ARPA
|
||||
|
||||
Received: by inmet.uucp (4.12/inmet) id AA02199; Wed, 18 Sep 85 09:10:17 edt
|
||||
Date: Wed, 18 Sep 85 09:10:17 edt
|
||||
Message-Id: <8509181310.AA02199@inmet.uucp>
|
||||
Uucp-Paths: {bellcore,ima,ihnp4}!inmet!tower
|
||||
Arpa-Path: ima!inmet!tower@CCA-UNIX.ARPA
|
||||
Organization: Intermetrics, Inc., Cambridge, MA, USA
|
||||
Home: 36 Porter Street, Somerville, MA 02143, USA +1 (617) 623-7739
|
||||
/* Written 6:48 pm Sep 14, 1985 by gml@ssc-vax in inmet:net.emacs */
|
||||
/* ---------- "Re: EMACS -- What does it mean?" ---------- */
|
||||
Pleeeeeeeze!!! Nice try on the meaning of EMACS. I believe the
|
||||
correct acronym is:
|
||||
|
||||
Emacs
|
||||
Makes
|
||||
All
|
||||
Computing
|
||||
Simple
|
||||
|
||||
Thank you, and Good Night
|
||||
/* End of text from inmet:net.emacs */
|
||||
|
||||
From: ho95e!wcs@mit-eddie (Bill.Stewart.4K435.x0705)
|
||||
Newsgroups: net.emacs
|
||||
Subject: Re: EMACS -- What does it mean?
|
||||
Date: Thu, 26-Sep-85 21:43:54 EDT
|
||||
Organization: AT&T Bell Labs, Holmdel NJ
|
||||
Apparently-To: emacs-netnews-distribution@mit-prep
|
||||
|
||||
> > very interesting, but what does GNU stand for ?
|
||||
> GNU = Gnu's Not UNIX. There is also MINCE, for Mince Is Not a Complete Emacs.
|
||||
> More recursive acronyms, anyone?
|
||||
Many people have also seen FINE Is Not Emacs, but the one that has
|
||||
character is THief Isn't Even Fine.
|
||||
--
|
||||
## Bill Stewart, AT&T Bell Labs, Holmdel NJ 1-201-949-0705 ihnp4!ho95c!wcs
|
||||
|
||||
Path: mit-eddie!think!harvard!bbnccv!bbncca!linus!decvax!mcnc!ncsu!uvacs!edison!ta2
|
||||
From: edison!ta2@mit-eddie (tom allebrandi)
|
||||
Newsgroups: net.emacs
|
||||
Subject: Re: Re: EMACS -- What does it mean?
|
||||
Date: Sun, 29-Sep-85 18:11:55 EDT
|
||||
Organization: General Electric's Mountain Resort
|
||||
Apparently-To: emacs-netnews-distribution@mit-prep
|
||||
|
||||
> GNU = Gnu's Not UNIX. There is also MINCE, for Mince Is Not a Complete Emacs.
|
||||
>
|
||||
> More recursive acronyms, anyone?
|
||||
>
|
||||
|
||||
For the DEC-system-10/20: FINE - Fine Is Not Emacs.....
|
||||
|
||||
--
|
||||
...............
|
||||
tom allebrandi 2, general electric aco, charlottesville, va
|
||||
{decvax,duke}!mcnc!ncsu!uvacs!edison!ta2
|
||||
box 8106, charlottesville, va, 22906
|
||||
(804) 978-5566
|
||||
...............
|
||||
|
||||
Date: Wed, 16 Oct 85 01:38:12 edt
|
||||
From: inmet!tower (Leonard H. Tower Jr.) <inmet!tower@cca-unix>
|
||||
Subject: more names
|
||||
To: tower@MIT-PREP.ARPA
|
||||
|
||||
Received: by inmet.uucp (4.12/inmet) id AA12997; Tue, 15 Oct 85 22:31:39 edt
|
||||
Date: Tue, 15 Oct 85 22:31:39 edt
|
||||
Message-Id: <8510160231.AA12997@inmet.uucp>
|
||||
Uucp-Paths: {bellcore,ima,ihnp4}!inmet!tower
|
||||
Arpa-Path: ima!inmet!tower@CCA-UNIX.ARPA
|
||||
Organization: Intermetrics, Inc., Cambridge, MA, USA
|
||||
Home: 36 Porter Street, Somerville, MA 02143, USA +1 (617) 623-7739
|
||||
/* Written 12:20 pm Oct 14, 1985 by rs@mirror.UUCP in inmet:net.emacs */
|
||||
|
||||
|
||||
SINE: Sine Is Not Emacs
|
||||
(MIT Architecture Machine Group)
|
||||
|
||||
EINE: Eine is Not Emacs
|
||||
(MIT Lisp Machine)
|
||||
|
||||
ZWEI: Zwei Was Eine Initially
|
||||
("rev2" of EINE)
|
||||
|
||||
--
|
||||
Rich $alz {mit-eddie, ihnp4!inmet, wjh12, cca, datacube} !mirror!rs
|
||||
Mirror Systems 2067 Massachusetts Ave.
|
||||
617-661-0777 Cambridge, MA, 02140
|
||||
/* End of text from inmet:net.emacs */
|
||||
|
||||
Path: mit-eddie!genrad!panda!talcott!harvard!seismo!gatech!ulysses!pajb
|
||||
From: ulysses!pajb@mit-eddie (Paul Bennett)
|
||||
Newsgroups: net.emacs
|
||||
Subject: Here we go again ...
|
||||
Date: Sat, 19-Oct-85 17:26:49 EDT
|
||||
Organization: AT&T Bell Laboratories, Murray Hill
|
||||
Apparently-To: emacs-netnews-distribution@mit-prep
|
||||
|
||||
|
||||
> EINE: Eine is Not Emacs
|
||||
> (MIT Lisp Machine)
|
||||
>
|
||||
> ZWEI: Zwei Was Eine Initially
|
||||
> ("rev2" of EINE)
|
||||
|
||||
DREI: DREI - Really Emacs Inside
|
||||
(Exists only in my head)
|
||||
|
||||
From: friedman@gnu.ai.mit.edu (Noah Friedman)
|
||||
Sender: friedman@gnu.ai.mit.edu
|
||||
To: jimb@gnu.ai.mit.edu, rms@gnu.ai.mit.edu
|
||||
Subject: etc/emacs.names
|
||||
Date: Fri, 9 Oct 92 00:54:57 edt
|
||||
|
||||
The following should be added:
|
||||
|
||||
|
||||
Emacs
|
||||
Makes
|
||||
A
|
||||
Computer
|
||||
Slow
|
||||
|
||||
From: S_TITZ@iravcl.ira.uka.de (Olaf Titz)
|
||||
Newsgroups: alt.religion.emacs
|
||||
Subject: Re: what emacs stands for
|
||||
Date: 12 Oct 92 19:29:32 GMT
|
||||
|
||||
Emacs Masquerades As Comfortable Shell
|
||||
Ever Made A Control-key Setup?
|
||||
Emacs: My Alternative Computer Story
|
||||
Emacs Made Almost Completely Screwed
|
||||
(by extensive use of M-x global-unset-key)
|
||||
Emacs Macht Alle Computer Schoen
|
||||
(deutsch) (=Emacs makes all computers beautiful)
|
||||
Each Mail A Continued Surprise
|
||||
Every Mode Acknowledges Customized Strokes
|
||||
(keystrokes, of course :-)
|
||||
Eating Memory And Cycle-Sucking
|
||||
Everyday Material Almost Compiled Successfully
|
||||
|
||||
now enough bashing for today :-)
|
||||
|
||||
|
||||
From: elvis@gnu.ai.mit.edu
|
||||
To: emacs-19-bugs@gnu.ai.mit.edu
|
||||
Subject: missing from etc/emacs.names
|
||||
Date: Thu, 20 May 93 02:21:27 edt
|
||||
|
||||
|
||||
Elvis
|
||||
Masterminds
|
||||
All
|
||||
Computer
|
||||
Software
|
||||
|
||||
Just so you boys know the score.
|
||||
|
||||
Thank you very Much,
|
||||
The King
|
||||
147
etc/LINUX-GNU
147
etc/LINUX-GNU
|
|
@ -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.
|
||||
|
||||
1492
etc/MACHINES
1492
etc/MACHINES
File diff suppressed because it is too large
Load diff
335
etc/MAILINGLISTS
335
etc/MAILINGLISTS
|
|
@ -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, 2003, 2004, 2006
|
||||
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
|
||||
3100
etc/MH-E-NEWS
3100
etc/MH-E-NEWS
File diff suppressed because it is too large
Load diff
290
etc/MORE.STUFF
290
etc/MORE.STUFF
|
|
@ -1,290 +0,0 @@
|
|||
More Neat Stuff for your Emacs
|
||||
Copyright (c) 1993, 1999, 2003, 2004, 2005, 2006
|
||||
Free software Foundation, Inc.
|
||||
See the end of the file for copying permissions.
|
||||
|
||||
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>.
|
||||
|
||||
* 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/>
|
||||
|
||||
* BibTeX:
|
||||
<URL:http://www.ida.ing.tu-bs.de/people/dirk/bibtex/index.html>
|
||||
|
||||
* BS: <URL:http://www.geekware.de/software/emacs/index.html>
|
||||
|
||||
* Calculator: <URL:http://www.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/>
|
||||
|
||||
* PC Selection: <URL:ftp://ftp.thp.uni-duisburg.de/pub/source/elisp/>
|
||||
|
||||
* PS mode: <URL:http://odur.let.rug.nl/%7Ekleiweg/postscript/>
|
||||
|
||||
* PS-print: <URL:http://www.cpqd.com.br/~vinicius/emacs/>
|
||||
|
||||
* QuickURL: <URL:http://www.davep.org/emacs/>
|
||||
|
||||
* RefTeX: <URL:http://staff.science.uva.nl/~dominik/Tools/reftex/>
|
||||
|
||||
* Speedbar, Checkdoc etc: <URL:http://cedet.sourceforge.net/>
|
||||
|
||||
* SQL: <URL:http://www.geocities.com/TimesSquare/6120/emacs.html>
|
||||
|
||||
* Tramp: Remote file access via rsh/ssh
|
||||
<URL:http://savannah.gnu.org/projects/tramp/>
|
||||
|
||||
* Webjump: <URL:http://www.neilvandyke.org/webjump>
|
||||
|
||||
* Whitespace: <URL:http://www.dsmit.com/lisp/>
|
||||
|
||||
* Auxiliary files
|
||||
|
||||
* (Tex)info files for use with Info-look that don't come from GNU
|
||||
packages:
|
||||
* Scheme: <URL:ftp://ftp-swiss.ai.mit.edu/pub/scm/r5rs.info.tar.gz>
|
||||
* LaTeX: <URL:ftp://ctan.tug.org/tex-archive/info/latex2e-help-texinfo/
|
||||
latex2e.texi> (or CTAN mirrors)
|
||||
* Perl: <URL:ftp://ftp.cpan.org/pub/CPAN/doc/manual/texinfo/>
|
||||
(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://www.gnu.org/software/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://ftp.gnu.org/pub/gnu/hyperbole/>
|
||||
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://www.plannerlove.com/>
|
||||
Planner is an organizer and day planner for Emacs.
|
||||
|
||||
* Preview LaTeX: embed preview LaTeX images in source buffer.
|
||||
<URL:http://preview-latex.sourceforge.net/>
|
||||
|
||||
* PSGML: <URL:http://www.lysator.liu.se/projects/about_psgml.html>
|
||||
DTD-aware serious SGML/XML editing.
|
||||
|
||||
* Quack: <URL:http://www.neilvandyke.org/quack/>
|
||||
Quack enhances Emacs support for Scheme
|
||||
|
||||
* Remember:
|
||||
<URL:http://sacha.free.net.ph/notebook/wiki/RememberEl.php>
|
||||
|
||||
* Session: <URL:http://emacs-session.sourceforge.net/>
|
||||
Session Management for Emacs.
|
||||
|
||||
* SLIME: The Superior Lisp Interaction Mode for Emacs:
|
||||
<URL:http://common-lisp.net/project/slime/>
|
||||
|
||||
* Tamago: Chinese/Japanese/Korean input method
|
||||
<URL:ftp://m17n.org/pub/tamago/>
|
||||
Emacs Lisp package to provide input methods for CJK characters.
|
||||
It can use these background conversion servers:
|
||||
FreeWnn (jserver, cserver, tserver),
|
||||
Wnn6,
|
||||
SJ3 Ver.2
|
||||
|
||||
* Tiny Tools: <URL:http://tiny-tools.sourceforge.net/>
|
||||
|
||||
* VM (View Mail): <URL:http://www.wonderworks.com/vm/> Alternative
|
||||
mail reader. There is a VM newsgroup: <URL:news:gnu.emacs.vm.info>
|
||||
|
||||
* W3: <URL:http://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. (It will be improved to take
|
||||
better advantage of Emacs 21 features.)
|
||||
|
||||
Local Variables:
|
||||
mode: text
|
||||
mode: view
|
||||
eval: (goto-address)
|
||||
End:
|
||||
|
||||
COPYING PERMISSIONS
|
||||
Permission to use, copy, modify, and distribute this
|
||||
software and its documentation for any purpose and without
|
||||
fee is hereby granted, provided that the above copyright
|
||||
notice appear in all copies and that both that copyright
|
||||
notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
arch-tag: c1d4e7c8-db85-44e6-909e-659e2b20fefa
|
||||
179
etc/MOTIVATION
179
etc/MOTIVATION
|
|
@ -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. /
|
||||
57
etc/Makefile
57
etc/Makefile
|
|
@ -1,57 +0,0 @@
|
|||
DESTDIR=
|
||||
LIBDIR=/usr/local/lib
|
||||
BINDIR=/usr/local/bin
|
||||
MANDIR=/usr/man/man1
|
||||
MANEXT=1
|
||||
|
||||
all:
|
||||
|
||||
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
|
||||
|
||||
refcard.dvi de-refcard.dvi fr-refcard.dvi pt-br-refcard.dvi sk-refcard.dvi: %.dvi: %.tex
|
||||
tex $<
|
||||
|
||||
cs-refcard.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: %.dvi: %.tex
|
||||
latex $<
|
||||
|
||||
refcard.ps de-refcard.ps fr-refcard.ps pt-br-refcard.ps: %.ps: %.dvi
|
||||
dvips -t landscape $<
|
||||
|
||||
cs-refcard.ps pl-refcard.ps ru-refcard.ps sk-refcard.ps: %.ps: %.dvi
|
||||
dvips $<
|
||||
|
||||
mostlyclean:
|
||||
-rm -f core *.dvi *.log
|
||||
|
||||
clean distclean maintainer-clean:
|
||||
-rm -f DOC* core *.dvi *.log
|
||||
|
||||
SOURCES = [0-9A-QS-Z]* README *.[ch16] emacs.* etags.* ledit.l ms-* \
|
||||
spook-lines tasks.texi termcap.* ulimit.hack *.tex
|
||||
|
||||
unlock:
|
||||
chmod u+w $(SOURCES)
|
||||
|
||||
relock:
|
||||
chmod u-w $(SOURCES)
|
||||
|
||||
# ${etcdir}/e/eterm-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
|
||||
2530
etc/NEWS.1-17
2530
etc/NEWS.1-17
File diff suppressed because it is too large
Load diff
1620
etc/NEWS.18
1620
etc/NEWS.18
File diff suppressed because it is too large
Load diff
6540
etc/NEWS.19
6540
etc/NEWS.19
File diff suppressed because it is too large
Load diff
4513
etc/NEWS.20
4513
etc/NEWS.20
File diff suppressed because it is too large
Load diff
4900
etc/NEWS.21
4900
etc/NEWS.21
File diff suppressed because it is too large
Load diff
14
etc/ORDERS
14
etc/ORDERS
|
|
@ -1,14 +0,0 @@
|
|||
Printed copies of the GNU Emacs Manual, the Emacs Lisp Reference
|
||||
Manual, "Programming in Emacs Lisp: An Introduction", and other
|
||||
materials can be ordered directly from the Free Software Foundation.
|
||||
For more information, see the order form on the web at
|
||||
<http://www.gnu.org/order/order.html>. Your purchases will help support
|
||||
further development of Emacs and other free software programs. You
|
||||
can also make tax-deductable donations to the Free Software Foundation,
|
||||
a not-for-profit organization (assuming you pay US taxes) - see
|
||||
<http://www.gnu.org/help/donate.html>.
|
||||
|
||||
Copyright (c) 2000, 2001, 2006 Free Software Foundation, Inc.
|
||||
|
||||
Verbatim copying and distribution is permitted in any medium
|
||||
provided this notice is preserved.
|
||||
1051
etc/OTHER.EMACSES
1051
etc/OTHER.EMACSES
File diff suppressed because it is too large
Load diff
3630
etc/PROBLEMS
3630
etc/PROBLEMS
File diff suppressed because it is too large
Load diff
29
etc/README
29
etc/README
|
|
@ -1,29 +0,0 @@
|
|||
This directory contains the architecture-independent files used by or
|
||||
with Emacs. This includes some text files of documentation for GNU
|
||||
Emacs or of interest to Emacs users, and the file of dumped docstrings
|
||||
for Emacs functions and variables.
|
||||
|
||||
Some of the *.tex files need special versions of TeX to typeset them.
|
||||
The files cs-*.tex and sk-*.tex need csTeX, a special version of TeX
|
||||
tailored to typesetting Czech and Slovak documents. We provide
|
||||
PostScript files for these documents, so that you could print them
|
||||
without installing the modified TeX versions.
|
||||
|
||||
`termcap.src' is included mainly for VMS. It is a copy of the
|
||||
`/etc/termcap' file used on Unix.
|
||||
|
||||
Copyright (c) 1992, 1995, 2001, 2006
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
|
||||
COPYING PERMISSIONS:
|
||||
|
||||
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.
|
||||
1378
etc/SERVICE
1378
etc/SERVICE
File diff suppressed because it is too large
Load diff
250
etc/TERMS
250
etc/TERMS
|
|
@ -1,250 +0,0 @@
|
|||
Copyright (c) 1999, 2003, 2006
|
||||
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
|
||||
|
|
@ -1,903 +0,0 @@
|
|||
The GNU Project
|
||||
|
||||
by Richard Stallman
|
||||
|
||||
originally published in the book "Open Sources"
|
||||
|
||||
The first software-sharing community
|
||||
|
||||
When I started working at the MIT Artificial Intelligence Lab in 1971,
|
||||
I became part of a software-sharing community that had existed for
|
||||
many years. Sharing of software was not limited to our particular
|
||||
community; it is as old as computers, just as sharing of recipes is as
|
||||
old as cooking. But we did it more than most.
|
||||
|
||||
The AI Lab used a timesharing operating system called ITS (the
|
||||
Incompatible Timesharing System) that the lab's staff hackers (1) had
|
||||
designed and written in assembler language for the Digital PDP-10, one
|
||||
of the large computers of the era. As a member of this community, an
|
||||
AI lab staff system hacker, my job was to improve this system.
|
||||
|
||||
We did not call our software "free software", because that term did
|
||||
not yet exist; but that is what it was. Whenever people from another
|
||||
university or a company wanted to port and use a program, we gladly
|
||||
let them. If you saw someone using an unfamiliar and interesting
|
||||
program, you could always ask to see the source code, so that you
|
||||
could read it, change it, or cannibalize parts of it to make a new
|
||||
program.
|
||||
|
||||
(1) The use of "hacker" to mean "security breaker" is a confusion on
|
||||
the part of the mass media. We hackers refuse to recognize that
|
||||
meaning, and continue using the word to mean, "Someone who loves to
|
||||
program and enjoys being clever about it."
|
||||
|
||||
The collapse of the community
|
||||
|
||||
The situation changed drastically in the early 1980s when Digital
|
||||
discontinued the PDP-10 series. Its architecture, elegant and powerful
|
||||
in the 60s, could not extend naturally to the larger address spaces
|
||||
that were becoming feasible in the 80s. This meant that nearly all of
|
||||
the programs composing ITS were obsolete.
|
||||
|
||||
The AI lab hacker community had already collapsed, not long before. In
|
||||
1981, the spin-off company Symbolics had hired away nearly all of the
|
||||
hackers from the AI lab, and the depopulated community was unable to
|
||||
maintain itself. (The book Hackers, by Steve Levy, describes these
|
||||
events, as well as giving a clear picture of this community in its
|
||||
prime.) When the AI lab bought a new PDP-10 in 1982, its
|
||||
administrators decided to use Digital's non-free timesharing system
|
||||
instead of ITS.
|
||||
|
||||
The modern computers of the era, such as the VAX or the 68020, had
|
||||
their own operating systems, but none of them were free software: you
|
||||
had to sign a nondisclosure agreement even to get an executable copy.
|
||||
|
||||
This meant that the first step in using a computer was to promise not
|
||||
to help your neighbor. A cooperating community was forbidden. The rule
|
||||
made by the owners of proprietary software was, "If you share with
|
||||
your neighbor, you are a pirate. If you want any changes, beg us to
|
||||
make them."
|
||||
|
||||
The idea that the proprietary software social system--the system that
|
||||
says you are not allowed to share or change software--is antisocial,
|
||||
that it is unethical, that it is simply wrong, may come as a surprise
|
||||
to some readers. But what else could we say about a system based on
|
||||
dividing the public and keeping users helpless? Readers who find the
|
||||
idea surprising may have taken proprietary social system as given, or
|
||||
judged it on the terms suggested by proprietary software businesses.
|
||||
Software publishers have worked long and hard to convince people that
|
||||
there is only one way to look at the issue.
|
||||
|
||||
When software publishers talk about "enforcing" their "rights" or
|
||||
"stopping piracy", what they actually *say* is secondary. The real
|
||||
message of these statements is in the unstated assumptions they take
|
||||
for granted; the public is supposed to accept them uncritically. So
|
||||
let's examine them.
|
||||
|
||||
One assumption is that software companies have an unquestionable
|
||||
natural right to own software and thus have power over all its users.
|
||||
(If this were a natural right, then no matter how much harm it does to
|
||||
the public, we could not object.) Interestingly, the US Constitution
|
||||
and legal tradition reject this view; copyright is not a natural
|
||||
right, but an artificial government-imposed monopoly that limits the
|
||||
users' natural right to copy.
|
||||
|
||||
Another unstated assumption is that the only important thing about
|
||||
software is what jobs it allows you to do--that we computer users
|
||||
should not care what kind of society we are allowed to have.
|
||||
|
||||
A third assumption is that we would have no usable software (or, would
|
||||
never have a program to do this or that particular job) if we did not
|
||||
offer a company power over the users of the program. This assumption
|
||||
may have seemed plausible, before the free software movement
|
||||
demonstrated that we can make plenty of useful software without
|
||||
putting chains on it.
|
||||
|
||||
If we decline to accept these assumptions, and judge these issues
|
||||
based on ordinary common-sense morality while placing the users first,
|
||||
we arrive at very different conclusions. Computer users should be free
|
||||
to modify programs to fit their needs, and free to share software,
|
||||
because helping other people is the basis of society.
|
||||
|
||||
There is no room here for an extensive statement of the reasoning
|
||||
behind this conclusion, so I refer the reader to the web page,
|
||||
<http://www.gnu.org/philosophy/why-free.html>.
|
||||
|
||||
A stark moral choice.
|
||||
|
||||
With my community gone, to continue as before was impossible. Instead,
|
||||
I faced a stark moral choice.
|
||||
|
||||
The easy choice was to join the proprietary software world, signing
|
||||
nondisclosure agreements and promising not to help my fellow hacker.
|
||||
Most likely I would also be developing software that was released
|
||||
under nondisclosure agreements, thus adding to the pressure on other
|
||||
people to betray their fellows too.
|
||||
|
||||
I could have made money this way, and perhaps amused myself writing
|
||||
code. But I knew that at the end of my career, I would look back on
|
||||
years of building walls to divide people, and feel I had spent my life
|
||||
making the world a worse place.
|
||||
|
||||
I had already experienced being on the receiving end of a
|
||||
nondisclosure agreement, when someone refused to give me and the MIT
|
||||
AI lab the source code for the control program for our printer. (The
|
||||
lack of certain features in this program made use of the printer
|
||||
extremely frustrating.) So I could not tell myself that nondisclosure
|
||||
agreements were innocent. I was very angry when he refused to share
|
||||
with us; I could not turn around and do the same thing to everyone
|
||||
else.
|
||||
|
||||
Another choice, straightforward but unpleasant, was to leave the
|
||||
computer field. That way my skills would not be misused, but they
|
||||
would still be wasted. I would not be culpable for dividing and
|
||||
restricting computer users, but it would happen nonetheless.
|
||||
|
||||
So I looked for a way that a programmer could do something for the
|
||||
good. I asked myself, was there a program or programs that I could
|
||||
write, so as to make a community possible once again?
|
||||
|
||||
The answer was clear: what was needed first was an operating system.
|
||||
That is the crucial software for starting to use a computer. With an
|
||||
operating system, you can do many things; without one, you cannot run
|
||||
the computer at all. With a free operating system, we could again have
|
||||
a community of cooperating hackers--and invite anyone to join. And
|
||||
anyone would be able to use a computer without starting out by
|
||||
conspiring to deprive his or her friends.
|
||||
|
||||
As an operating system developer, I had the right skills for this job.
|
||||
So even though I could not take success for granted, I realized that I
|
||||
was elected to do the job. I chose to make the system compatible with
|
||||
Unix so that it would be portable, and so that Unix users could easily
|
||||
switch to it. The name GNU was chosen following a hacker tradition, as
|
||||
a recursive acronym for "GNU's Not Unix."
|
||||
|
||||
An operating system does not mean just a kernel, barely enough to run
|
||||
other programs. In the 1970s, every operating system worthy of the
|
||||
name included command processors, assemblers, compilers, interpreters,
|
||||
debuggers, text editors, mailers, and much more. ITS had them, Multics
|
||||
had them, VMS had them, and Unix had them. The GNU operating system
|
||||
would include them too.
|
||||
|
||||
Later I heard these words, attributed to Hillel (1):
|
||||
|
||||
If I am not for myself, who will be for me?
|
||||
If I am only for myself, what am I?
|
||||
If not now, when?
|
||||
|
||||
The decision to start the GNU project was based on a similar spirit.
|
||||
|
||||
(1) As an Atheist, I don't follow any religious leaders, but I
|
||||
sometimes find I admire something one of them has said.
|
||||
|
||||
Free as in freedom
|
||||
|
||||
The term "free software" is sometimes misunderstood--it has nothing to
|
||||
do with price. It is about freedom. Here, therefore, is the definition
|
||||
of free software: a program is free software, for you, a particular
|
||||
user, if:
|
||||
|
||||
* You have the freedom to run the program, for any purpose.
|
||||
* You have the freedom to modify the program to suit your needs. (To
|
||||
make this freedom effective in practice, you must have access to
|
||||
the source code, since making changes in a program without having
|
||||
the source code is exceedingly difficult.)
|
||||
* You have the freedom to redistribute copies, either gratis or for
|
||||
a fee.
|
||||
* You have the freedom to distribute modified versions of the
|
||||
program, so that the community can benefit from your improvements.
|
||||
|
||||
Since "free" refers to freedom, not to price, there is no
|
||||
contradiction between selling copies and free software. In fact, the
|
||||
freedom to sell copies is crucial: collections of free software sold
|
||||
on CD-ROMs are important for the community, and selling them is an
|
||||
important way to raise funds for free software development. Therefore,
|
||||
a program which people are not free to include on these collections is
|
||||
not free software.
|
||||
|
||||
Because of the ambiguity of "free", people have long looked for
|
||||
alternatives, but no one has found a suitable alternative. The English
|
||||
Language has more words and nuances than any other, but it lacks a
|
||||
simple, unambiguous, word that means "free," as in
|
||||
freedom--"unfettered," being the word that comes closest in meaning.
|
||||
Such alternatives as "liberated", "freedom" and "open" have either the
|
||||
wrong meaning or some other disadvantage.
|
||||
|
||||
GNU software and the GNU system
|
||||
|
||||
Developing a whole system is a very large project. To bring it into
|
||||
reach, I decided to adapt and use existing pieces of free software
|
||||
wherever that was possible. For example, I decided at the very
|
||||
beginning to use TeX as the principal text formatter; a few years
|
||||
later, I decided to use the X Window System rather than writing
|
||||
another window system for GNU.
|
||||
|
||||
Because of this decision, the GNU system is not the same as the
|
||||
collection of all GNU software. The GNU system includes programs that
|
||||
are not GNU software, programs that were developed by other people and
|
||||
projects for their own purposes, but which we can use because they are
|
||||
free software.
|
||||
|
||||
Commencing the project
|
||||
|
||||
In January 1984 I quit my job at MIT and began writing GNU software.
|
||||
Leaving MIT was necessary so that MIT would not be able to interfere
|
||||
with distributing GNU as free software. If I had remained on the
|
||||
staff, MIT could have claimed to own the work, and could have imposed
|
||||
their own distribution terms, or even turned the work into a
|
||||
proprietary software package. I had no intention of doing a large
|
||||
amount of work only to see it become useless for its intended purpose:
|
||||
creating a new software-sharing community.
|
||||
|
||||
However, Professor Winston, then the head of the MIT AI Lab, kindly
|
||||
invited me to keep using the lab's facilities.
|
||||
|
||||
The first steps
|
||||
|
||||
Shortly before beginning the GNU project, I heard about the Free
|
||||
University Compiler Kit, also known as VUCK. (The Dutch word for
|
||||
"free" is written with a V.) This was a compiler designed to handle
|
||||
multiple languages, including C and Pascal, and to support multiple
|
||||
target machines. I wrote to its author asking if GNU could use it.
|
||||
|
||||
He responded derisively, stating that the university was free but the
|
||||
compiler was not. I therefore decided that my first program for the
|
||||
GNU project would be a multi-language, multi-platform compiler.
|
||||
|
||||
Hoping to avoid the need to write the whole compiler myself, I
|
||||
obtained the source code for the Pastel compiler, which was a
|
||||
multi-platform compiler developed at Lawrence Livermore Lab. It
|
||||
supported, and was written in, an extended version of Pascal, designed
|
||||
to be a system-programming language. I added a C front end, and began
|
||||
porting it to the Motorola 68000 computer. But I had to give that up
|
||||
when I discovered that the compiler needed many megabytes of stack
|
||||
space, and the available 68000 Unix system would only allow 64k.
|
||||
|
||||
I then realized that the Pastel compiler functioned by parsing the
|
||||
entire input file into a syntax tree, converting the whole syntax tree
|
||||
into a chain of "instructions", and then generating the whole output
|
||||
file, without ever freeing any storage. At this point, I concluded I
|
||||
would have to write a new compiler from scratch. That new compiler is
|
||||
now known as GCC; none of the Pastel compiler is used in it, but I
|
||||
managed to adapt and use the C front end that I had written. But that
|
||||
was some years later; first, I worked on GNU Emacs.
|
||||
|
||||
GNU Emacs
|
||||
|
||||
I began work on GNU Emacs in September 1984, and in early 1985 it was
|
||||
beginning to be usable. This enabled me to begin using Unix systems to
|
||||
do editing; having no interest in learning to use vi or ed, I had done
|
||||
my editing on other kinds of machines until then.
|
||||
|
||||
At this point, people began wanting to use GNU Emacs, which raised the
|
||||
question of how to distribute it. Of course, I put it on the anonymous
|
||||
ftp server on the MIT computer that I used. (This computer,
|
||||
prep.ai.mit.edu, thus became the principal GNU ftp distribution site;
|
||||
when it was decommissioned a few years later, we transferred the name
|
||||
to our new ftp server.) But at that time, many of the interested
|
||||
people were not on the Internet and could not get a copy by ftp. So
|
||||
the question was, what would I say to them?
|
||||
|
||||
I could have said, "Find a friend who is on the net and who will make
|
||||
a copy for you." Or I could have done what I did with the original
|
||||
PDP-10 Emacs: tell them, "Mail me a tape and a SASE, and I will mail
|
||||
it back with Emacs on it." But I had no job, and I was looking for
|
||||
ways to make money from free software. So I announced that I would
|
||||
mail a tape to whoever wanted one, for a fee of $150. In this way, I
|
||||
started a free software distribution business, the precursor of the
|
||||
companies that today distribute entire Linux-based GNU systems.
|
||||
|
||||
Is a program free for every user?
|
||||
|
||||
If a program is free software when it leaves the hands of its author,
|
||||
this does not necessarily mean it will be free software for everyone
|
||||
who has a copy of it. For example, public domain software (software
|
||||
that is not copyrighted) is free software; but anyone can make a
|
||||
proprietary modified version of it. Likewise, many free programs are
|
||||
copyrighted but distributed under simple permissive licenses which
|
||||
allow proprietary modified versions.
|
||||
|
||||
The paradigmatic example of this problem is the X Window System.
|
||||
Developed at MIT, and released as free software with a permissive
|
||||
license, it was soon adopted by various computer companies. They added
|
||||
X to their proprietary Unix systems, in binary form only, and covered
|
||||
by the same nondisclosure agreement. These copies of X were no more
|
||||
free software than Unix was.
|
||||
|
||||
The developers of the X Window System did not consider this a
|
||||
problem--they expected and intended this to happen. Their goal was not
|
||||
freedom, just "success", defined as "having many users." They did not
|
||||
care whether these users had freedom, only that they should be
|
||||
numerous.
|
||||
|
||||
This lead to a paradoxical situation where two different ways of
|
||||
counting the amount of freedom gave different answers to the question,
|
||||
"Is this program free?" If you judged based on the freedom provided by
|
||||
the distribution terms of the MIT release, you would say that X was
|
||||
free software. But if you measured the freedom of the average user of
|
||||
X, you would have to say it was proprietary software. Most X users
|
||||
were running the proprietary versions that came with Unix systems, not
|
||||
the free version.
|
||||
|
||||
Copyleft and the GNU GPL
|
||||
|
||||
The goal of GNU was to give users freedom, not just to be popular. So
|
||||
we needed to use distribution terms that would prevent GNU software
|
||||
from being turned into proprietary software. The method we use is
|
||||
called "copyleft".(1)
|
||||
|
||||
Copyleft uses copyright law, but flips it over to serve the opposite
|
||||
of its usual purpose: instead of a means of privatizing software, it
|
||||
becomes a means of keeping software free.
|
||||
|
||||
The central idea of copyleft is that we give everyone permission to
|
||||
run the program, copy the program, modify the program, and distribute
|
||||
modified versions--but not permission to add restrictions of their
|
||||
own. Thus, the crucial freedoms that define "free software" are
|
||||
guaranteed to everyone who has a copy; they become inalienable rights.
|
||||
|
||||
For an effective copyleft, modified versions must also be free. This
|
||||
ensures that work based on ours becomes available to our community if
|
||||
it is published. When programmers who have jobs as programmers
|
||||
volunteer to improve GNU software, it is copyleft that prevents their
|
||||
employers from saying, "You can't share those changes, because we are
|
||||
going to use them to make our proprietary version of the program."
|
||||
|
||||
The requirement that changes must be free is essential if we want to
|
||||
ensure freedom for every user of the program. The companies that
|
||||
privatized the X Window System usually made some changes to port it to
|
||||
their systems and hardware. These changes were small compared with the
|
||||
great extent of X, but they were not trivial. If making changes were
|
||||
an excuse to deny the users freedom, it would be easy for anyone to
|
||||
take advantage of the excuse.
|
||||
|
||||
A related issue concerns combining a free program with non-free code.
|
||||
Such a combination would inevitably be non-free; whichever freedoms
|
||||
are lacking for the non-free part would be lacking for the whole as
|
||||
well. To permit such combinations would open a hole big enough to sink
|
||||
a ship. Therefore, a crucial requirement for copyleft is to plug this
|
||||
hole: anything added to or combined with a copylefted program must be
|
||||
such that the larger combined version is also free and copylefted.
|
||||
|
||||
The specific implementation of copyleft that we use for most GNU
|
||||
software is the GNU General Public License, or GNU GPL for short. We
|
||||
have other kinds of copyleft that are used in specific circumstances.
|
||||
GNU manuals are copylefted also, but use a much simpler kind of
|
||||
copyleft, because the complexity of the GNU GPL is not necessary for
|
||||
manuals.
|
||||
|
||||
(1) In 1984 or 1985, Don Hopkins (a very imaginative fellow) mailed me
|
||||
a letter. On the envelope he had written several amusing sayings,
|
||||
including this one: "Copyleft--all rights reversed." I used the word
|
||||
"copyleft" to name the distribution concept I was developing at the
|
||||
time.
|
||||
|
||||
The Free Software Foundation
|
||||
|
||||
As interest in using Emacs was growing, other people became involved
|
||||
in the GNU project, and we decided that it was time to seek funding
|
||||
once again. So in 1985 we created the Free Software Foundation, a
|
||||
tax-exempt charity for free software development. The FSF also took
|
||||
over the Emacs tape distribution business; later it extended this by
|
||||
adding other free software (both GNU and non-GNU) to the tape, and by
|
||||
selling free manuals as well.
|
||||
|
||||
The FSF accepts donations, but most of its income has always come from
|
||||
sales--of copies of free software, and of other related services.
|
||||
Today it sells CD-ROMs of source code, CD-ROMs with binaries, nicely
|
||||
printed manuals (all with freedom to redistribute and modify), and
|
||||
Deluxe Distributions (where we build the whole collection of software
|
||||
for your choice of platform).
|
||||
|
||||
Free Software Foundation employees have written and maintained a
|
||||
number of GNU software packages. Two notable ones are the C library
|
||||
and the shell. The GNU C library is what every program running on a
|
||||
GNU/Linux system uses to communicate with Linux. It was developed by a
|
||||
member of the Free Software Foundation staff, Roland McGrath. The
|
||||
shell used on most GNU/Linux systems is BASH, the Bourne Again
|
||||
Shell(1), which was developed by FSF employee Brian Fox.
|
||||
|
||||
We funded development of these programs because the GNU project was
|
||||
not just about tools or a development environment. Our goal was a
|
||||
complete operating system, and these programs were needed for that
|
||||
goal.
|
||||
|
||||
(1) "Bourne again Shell" is a joke on the name ``Bourne Shell'', which
|
||||
was the usual shell on Unix.
|
||||
|
||||
Free software support
|
||||
|
||||
The free software philosophy rejects a specific widespread business
|
||||
practice, but it is not against business. When businesses respect the
|
||||
users' freedom, we wish them success.
|
||||
|
||||
Selling copies of Emacs demonstrates one kind of free software
|
||||
business. When the FSF took over that business, I needed another way
|
||||
to make a living. I found it in selling services relating to the free
|
||||
software I had developed. This included teaching, for subjects such as
|
||||
how to program GNU Emacs and how to customize GCC, and software
|
||||
development, mostly porting GCC to new platforms.
|
||||
|
||||
Today each of these kinds of free software business is practiced by a
|
||||
number of corporations. Some distribute free software collections on
|
||||
CD-ROM; others sell support at levels ranging from answering user
|
||||
questions, to fixing bugs, to adding major new features. We are even
|
||||
beginning to see free software companies based on launching new free
|
||||
software products.
|
||||
|
||||
Watch out, though--a number of companies that associate themselves
|
||||
with the term "open source" actually base their business on non-free
|
||||
software that works with free software. These are not free software
|
||||
companies, they are proprietary software companies whose products
|
||||
tempt users away from freedom. They call these "value added", which
|
||||
reflects the values they would like us to adopt: convenience above
|
||||
freedom. If we value freedom more, we should call them "freedom
|
||||
subtracted" products.
|
||||
|
||||
Technical goals
|
||||
|
||||
The principal goal of GNU was to be free software. Even if GNU had no
|
||||
technical advantage over Unix, it would have a social advantage,
|
||||
allowing users to cooperate, and an ethical advantage, respecting the
|
||||
user's freedom.
|
||||
|
||||
But it was natural to apply the known standards of good practice to
|
||||
the work--for example, dynamically allocating data structures to avoid
|
||||
arbitrary fixed size limits, and handling all the possible 8-bit codes
|
||||
wherever that made sense.
|
||||
|
||||
In addition, we rejected the Unix focus on small memory size, by
|
||||
deciding not to support 16-bit machines (it was clear that 32-bit
|
||||
machines would be the norm by the time the GNU system was finished),
|
||||
and to make no effort to reduce memory usage unless it exceeded a
|
||||
megabyte. In programs for which handling very large files was not
|
||||
crucial, we encouraged programmers to read an entire input file into
|
||||
core, then scan its contents without having to worry about I/O.
|
||||
|
||||
These decisions enabled many GNU programs to surpass their Unix
|
||||
counterparts in reliability and speed.
|
||||
|
||||
Donated computers
|
||||
|
||||
As the GNU project's reputation grew, people began offering to donate
|
||||
machines running UNIX to the project. These were very useful, because
|
||||
the easiest way to develop components of GNU was to do it on a UNIX
|
||||
system, and replace the components of that system one by one. But they
|
||||
raised an ethical issue: whether it was right for us to have a copy of
|
||||
UNIX at all.
|
||||
|
||||
UNIX was (and is) proprietary software, and the GNU project's
|
||||
philosophy said that we should not use proprietary software. But,
|
||||
applying the same reasoning that leads to the conclusion that violence
|
||||
in self defense is justified, I concluded that it was legitimate to
|
||||
use a proprietary package when that was crucial for developing free
|
||||
replacement that would help others stop using the proprietary package.
|
||||
|
||||
But, even if this was a justifiable evil, it was still an evil. Today
|
||||
we no longer have any copies of Unix, because we have replaced them
|
||||
with free operating systems. If we could not replace a machine's
|
||||
operating system with a free one, we replaced the machine instead.
|
||||
|
||||
The GNU Task List
|
||||
|
||||
As the GNU project proceeded, and increasing numbers of system
|
||||
components were found or developed, eventually it became useful to
|
||||
make a list of the remaining gaps. We used it to recruit developers to
|
||||
write the missing pieces. This list became known as the GNU task list.
|
||||
In addition to missing Unix components, we listed added various other
|
||||
useful software and documentation projects that, we thought, a truly
|
||||
complete system ought to have.
|
||||
|
||||
Today, hardly any Unix components are left in the GNU task list--those
|
||||
jobs have been done, aside from a few inessential ones. But the list
|
||||
is full of projects that some might call "applications". Any program
|
||||
that appeals to more than a narrow class of users would be a useful
|
||||
thing to add to an operating system.
|
||||
|
||||
Even games are included in the task list--and have been since the
|
||||
beginning. Unix included games, so naturally GNU should too. But
|
||||
compatibility was not an issue for games, so we did not follow the
|
||||
list of games that Unix had. Instead, we listed a spectrum of
|
||||
different kinds of games that users might like.
|
||||
|
||||
The GNU Library GPL
|
||||
|
||||
The GNU C library uses a special kind of copyleft called the GNU
|
||||
Library General Public License, which gives permission to link
|
||||
proprietary software with the library. Why make this exception?
|
||||
|
||||
It is not a matter of principle; there is no principle that says
|
||||
proprietary software products are entitled to include our code. (Why
|
||||
contribute to a project predicated on refusing to share with us?)
|
||||
Using the LGPL for the C library, or for any library, is a matter of
|
||||
strategy.
|
||||
|
||||
The C library does a generic job; every proprietary system or compiler
|
||||
comes with a C library. Therefore, to make our C library available
|
||||
only to free software would not have given free software any
|
||||
advantage--it would only have discouraged use of our library.
|
||||
|
||||
One system is an exception to this: on the GNU system (and this
|
||||
includes GNU/Linux), the GNU C library is the only C library. So the
|
||||
distribution terms of the GNU C library determine whether it is
|
||||
possible to compile a proprietary program for the GNU system. There is
|
||||
no ethical reason to allow proprietary applications on the GNU system,
|
||||
but strategically it seems that disallowing them would do more to
|
||||
discourage use of the GNU system than to encourage development of free
|
||||
applications.
|
||||
|
||||
That is why using the Library GPL is a good strategy for the C
|
||||
library. For other libraries, the strategic decision needs to be
|
||||
considered on a case-by-case basis. When a library does a special job
|
||||
that can help write certain kinds of programs, then releasing it under
|
||||
the GPL, limiting it to free programs only, is a way of helping other
|
||||
free software developers, giving them an advantage against proprietary
|
||||
software.
|
||||
|
||||
Consider GNU Readline, a library that was developed to provide
|
||||
command-line editing for BASH. Readline is released under the ordinary
|
||||
GNU GPL, not the Library GPL. This probably does reduce the amount
|
||||
Readline is used, but that is no loss for us. Meanwhile, at least one
|
||||
useful application has been made free software specifically so it
|
||||
could use Readline, and that is a real gain for the community.
|
||||
|
||||
Proprietary software developers have the advantages money provides;
|
||||
free software developers need to make advantages for each other. I
|
||||
hope some day we will have a large collection of GPL-covered libraries
|
||||
that have no parallel available to proprietary software, providing
|
||||
useful modules to serve as building blocks in new free software, and
|
||||
adding up to a major advantage for further free software development.
|
||||
|
||||
Scratching an itch?
|
||||
|
||||
Eric Raymond says that "Every good work of software starts by
|
||||
scratching a developer's personal itch." Maybe that happens sometimes,
|
||||
but many essential pieces of GNU software were developed in order to
|
||||
have a complete free operating system. They come from a vision and a
|
||||
plan, not from impulse.
|
||||
|
||||
For example, we developed the GNU C library because a Unix-like system
|
||||
needs a C library, the Bourne-Again Shell (bash) because a Unix-like
|
||||
system needs a shell, and GNU tar because a Unix-like system needs a
|
||||
tar program. The same is true for my own programs--the GNU C compiler,
|
||||
GNU Emacs, GDB and GNU Make.
|
||||
|
||||
Some GNU programs were developed to cope with specific threats to our
|
||||
freedom. Thus, we developed gzip to replace the Compress program,
|
||||
which had been lost to the community because of the LZW patents. We
|
||||
found people to develop LessTif, and more recently started GNOME and
|
||||
Harmony, to address the problems caused by certain proprietary
|
||||
libraries (see below). We are developing the GNU Privacy Guard to
|
||||
replace popular non-free encryption software, because users should not
|
||||
have to choose between privacy and freedom.
|
||||
|
||||
Of course, the people writing these programs became interested in the
|
||||
work, and many features were added to them by various people for the
|
||||
sake of their own needs and interests. But that is not why the
|
||||
programs exist.
|
||||
|
||||
Unexpected developments
|
||||
|
||||
At the beginning of the GNU project, I imagined that we would develop
|
||||
the whole GNU system, then release it as a whole. That is not how it
|
||||
happened.
|
||||
|
||||
Since each component of the GNU system was implemented on a Unix
|
||||
system, each component could run on Unix systems, long before a
|
||||
complete GNU system existed. Some of these programs became popular,
|
||||
and users began extending them and porting them---to the various
|
||||
incompatible versions of Unix, and sometimes to other systems as well.
|
||||
|
||||
The process made these programs much more powerful, and attracted both
|
||||
funds and contributors to the GNU project. But it probably also
|
||||
delayed completion of a minimal working system by several years, as
|
||||
GNU developers' time was put into maintaining these ports and adding
|
||||
features to the existing components, rather than moving on to write
|
||||
one missing component after another.
|
||||
|
||||
The GNU Hurd
|
||||
|
||||
By 1990, the GNU system was almost complete; the only major missing
|
||||
component was the kernel. We had decided to implement our kernel as a
|
||||
collection of server processes running on top of Mach. Mach is a
|
||||
microkernel developed at Carnegie Mellon University and then at the
|
||||
University of Utah; the GNU HURD is a collection of servers (or ``herd
|
||||
of gnus'') that run on top of Mach, and do the various jobs of the
|
||||
Unix kernel. The start of development was delayed as we waited for
|
||||
Mach to be released as free software, as had been promised.
|
||||
|
||||
One reason for choosing this design was to avoid what seemed to be the
|
||||
hardest part of the job: debugging a kernel program without a
|
||||
source-level debugger to do it with. This part of the job had been
|
||||
done already, in Mach, and we expected to debug the HURD servers as
|
||||
user programs, with GDB. But it took a long time to make that
|
||||
possible, and the multi-threaded servers that send messages to each
|
||||
other have turned out to be very hard to debug. Making the HURD work
|
||||
solidly has stretched on for many years.
|
||||
|
||||
Alix
|
||||
|
||||
The GNU kernel was not originally supposed to be called the HURD. Its
|
||||
original name was Alix--named after the woman who was my sweetheart at
|
||||
the time. She, a Unix system administrator, had pointed out how her
|
||||
name would fit a common naming pattern for Unix system versions; as a
|
||||
joke, she told her friends, "Someone should name a kernel after me." I
|
||||
said nothing, but decided to surprise her with a kernel named Alix.
|
||||
|
||||
It did not stay that way. Michael Bushnell (now Thomas), the main
|
||||
developer of the kernel, preferred the name HURD, and redefined Alix
|
||||
to refer to a certain part of the kernel--the part that would trap
|
||||
system calls and handle them by sending messages to HURD servers.
|
||||
|
||||
Ultimately, Alix and I broke up, and she changed her name;
|
||||
independently, the HURD design was changed so that the C library would
|
||||
send messages directly to servers, and this made the Alix component
|
||||
disappear from the design.
|
||||
|
||||
But before these things happened, a friend of hers came across the
|
||||
name Alix in the HURD source code, and mentioned the name to her. So
|
||||
the name did its job.
|
||||
|
||||
Linux and GNU/Linux
|
||||
|
||||
The GNU Hurd is not ready for production use. Fortunately, another
|
||||
kernel is available. In 1991, Linus Torvalds developed a
|
||||
Unix-compatible kernel and called it Linux. Around 1992, combining
|
||||
Linux with the not-quite-complete GNU system resulted in a complete
|
||||
free operating system. (Combining them was a substantial job in
|
||||
itself, of course.) It is due to Linux that we can actually run a
|
||||
version of the GNU system today.
|
||||
|
||||
We call this system version GNU/Linux, to express its composition as a
|
||||
combination of the GNU system with Linux as the kernel.
|
||||
|
||||
Challenges in our future
|
||||
|
||||
We have proved our ability to develop a broad spectrum of free
|
||||
software. This does not mean we are invincible and unstoppable.
|
||||
Several challenges make the future of free software uncertain; meeting
|
||||
them will require steadfast effort and endurance, sometimes lasting
|
||||
for years. It will require the kind of determination that people
|
||||
display when they value their freedom and will not let anyone take it
|
||||
away.
|
||||
|
||||
The following four sections discuss these challenges.
|
||||
|
||||
Secret hardware
|
||||
|
||||
Hardware manufacturers increasingly tend to keep hardware
|
||||
specifications secret. This makes it difficult to write free drivers
|
||||
so that Linux and XFree86 can support new hardware. We have complete
|
||||
free systems today, but we will not have them tomorrow if we cannot
|
||||
support tomorrow's computers.
|
||||
|
||||
There are two ways to cope with this problem. Programmers can do
|
||||
reverse engineering to figure out how to support the hardware. The
|
||||
rest of us can choose the hardware that is supported by free software;
|
||||
as our numbers increase, secrecy of specifications will become a
|
||||
self-defeating policy.
|
||||
|
||||
Reverse engineering is a big job; will we have programmers with
|
||||
sufficient determination to undertake it? Yes--if we have built up a
|
||||
strong feeling that free software is a matter of principle, and
|
||||
non-free drivers are intolerable. And will large numbers of us spend
|
||||
extra money, or even a little extra time, so we can use free drivers?
|
||||
Yes, if the determination to have freedom is widespread.
|
||||
|
||||
Non-free libraries
|
||||
|
||||
A non-free library that runs on free operating systems acts as a trap
|
||||
for free software developers. The library's attractive features are
|
||||
the bait; if you use the library, you fall into the trap, because your
|
||||
program cannot usefully be part of a free operating system. (Strictly
|
||||
speaking, we could include your program, but it won't run with the
|
||||
library missing.) Even worse, if a program that uses the proprietary
|
||||
library becomes popular, it can lure other unsuspecting programmers
|
||||
into the trap.
|
||||
|
||||
The first instance of this problem was the Motif toolkit, back in the
|
||||
80s. Although there were as yet no free operating systems, it was
|
||||
clear what problem Motif would cause for them later on. The GNU
|
||||
Project responded in two ways: by asking individual free software
|
||||
projects to support the free X toolkit widgets as well as Motif, and
|
||||
by asking for someone to write a free replacement for Motif. The job
|
||||
took many years; LessTif, developed by the Hungry Programmers, became
|
||||
powerful enough to support most Motif applications only in 1997.
|
||||
|
||||
Between 1996 and 1998, another non-free GUI toolkit library, called
|
||||
Qt, was used in a substantial collection of free software, the desktop
|
||||
KDE.
|
||||
|
||||
Free GNU/Linux systems were unable to use KDE, because we could not
|
||||
use the library. However, some commercial distributors of GNU/Linux
|
||||
systems who were not strict about sticking with free software added
|
||||
KDE to their systems--producing a system with more capabilities, but
|
||||
less freedom. The KDE group was actively encouraging more programmers
|
||||
to use Qt, and millions of new "Linux users" had never been exposed to
|
||||
the idea that there was a problem in this. The situation appeared
|
||||
grim.
|
||||
|
||||
The free software community responded to the problem in two ways:
|
||||
GNOME and Harmony.
|
||||
|
||||
GNOME, the GNU Network Object Model Environment, is GNU's desktop
|
||||
project. Started in 1997 by Miguel de Icaza, and developed with the
|
||||
support of Red Hat Software, GNOME set out to provide similar desktop
|
||||
facilities, but using free software exclusively. It has technical
|
||||
advantages as well, such as supporting a variety of languages, not
|
||||
just C++. But its main purpose was freedom: not to require the use of
|
||||
any non-free software.
|
||||
|
||||
Harmony is a compatible replacement library, designed to make it
|
||||
possible to run KDE software without using Qt.
|
||||
|
||||
In November 1998, the developers of Qt announced a change of license
|
||||
which, when carried out, should make Qt free software. There is no way
|
||||
to be sure, but I think that this was partly due to the community's
|
||||
firm response to the problem that Qt posed when it was non-free. (The
|
||||
new license is inconvenient and inequitable, so it remains desirable
|
||||
to avoid using Qt.)
|
||||
|
||||
[Subsequent note: in September 2000, Qt was rereleased under the GNU
|
||||
GPL, which essentially solved this problem.]
|
||||
|
||||
How will we respond to the next tempting non-free library? Will the
|
||||
whole community understand the need to stay out of the trap? Or will
|
||||
many of us give up freedom for convenience, and produce a major
|
||||
problem? Our future depends on our philosophy.
|
||||
|
||||
Software patents
|
||||
|
||||
The worst threat we face comes from software patents, which can put
|
||||
algorithms and features off limits to free software for up to twenty
|
||||
years. The LZW compression algorithm patents were applied for in 1983,
|
||||
and we still cannot release free software to produce proper compressed
|
||||
GIFs. In 1998, a free program to produce MP3 compressed audio was
|
||||
removed from distribution under threat of a patent suit.
|
||||
|
||||
There are ways to cope with patents: we can search for evidence that a
|
||||
patent is invalid, and we can look for alternative ways to do a job.
|
||||
But each of these methods works only sometimes; when both fail, a
|
||||
patent may force all free software to lack some feature that users
|
||||
want. What will we do when this happens?
|
||||
|
||||
Those of us who value free software for freedom's sake will stay with
|
||||
free software anyway. We will manage to get work done without the
|
||||
patented features. But those who value free software because they
|
||||
expect it to be techically superior are likely to call it a failure
|
||||
when a patent holds it back. Thus, while it is useful to talk about
|
||||
the practical effectiveness of the "cathedral" model of development,
|
||||
and the reliability and power of some free software, we must not stop
|
||||
there. We must talk about freedom and principle.
|
||||
|
||||
Free documentation
|
||||
|
||||
The biggest deficiency in our free operating systems is not in the
|
||||
software--it is the lack of good free manuals that we can include in
|
||||
our systems. Documentation is an essential part of any software
|
||||
package; when an important free software package does not come with a
|
||||
good free manual, that is a major gap. We have many such gaps today.
|
||||
|
||||
Free documentation, like free software, is a matter of freedom, not
|
||||
price. The criterion for a free manual is pretty much the same as for
|
||||
free software: it is a matter of giving all users certain freedoms.
|
||||
Redistribution (including commercial sale) must be permitted, on-line
|
||||
and on paper, so that the manual can accompany every copy of the
|
||||
program.
|
||||
|
||||
Permission for modification is crucial too. As a general rule, I don't
|
||||
believe that it is essential for people to have permission to modify
|
||||
all sorts of articles and books. For example, I don't think you or I
|
||||
are obliged to give permission to modify articles like this one, which
|
||||
describe our actions and our views.
|
||||
|
||||
But there is a particular reason why the freedom to modify is crucial
|
||||
for documentation for free software. When people exercise their right
|
||||
to modify the software, and add or change its features, if they are
|
||||
conscientious they will change the manual too--so they can provide
|
||||
accurate and usable documentation with the modified program. A manual
|
||||
which does not allow programmers to be conscientious and finish the
|
||||
job, does not fill our community's needs.
|
||||
|
||||
Some kinds of limits on how modifications are done pose no problem.
|
||||
For example, requirements to preserve the original author's copyright
|
||||
notice, the distribution terms, or the list of authors, are ok. It is
|
||||
also no problem to require modified versions to include notice that
|
||||
they were modified, even to have entire sections that may not be
|
||||
deleted or changed, as long as these sections deal with nontechnical
|
||||
topics. These kinds of restrictions are not a problem because they
|
||||
don't stop the conscientious programmer from adapting the manual to
|
||||
fit the modified program. In other words, they don't block the free
|
||||
software community from making full use of the manual.
|
||||
|
||||
However, it must be possible to modify all the *technical* content of
|
||||
the manual, and then distribute the result in all the usual media,
|
||||
through all the usual channels; otherwise, the restrictions do
|
||||
obstruct the community, the manual is not free, and we need another
|
||||
manual.
|
||||
|
||||
Will free software developers have the awareness and determination to
|
||||
produce a full spectrum of free manuals? Once again, our future
|
||||
depends on philosophy.
|
||||
|
||||
We must talk about freedom
|
||||
|
||||
Estimates today are that there are ten million users of GNU/Linux
|
||||
systems such as Debian GNU/Linux and Red Hat Linux. Free software has
|
||||
developed such practical advantages that users are flocking to it for
|
||||
purely practical reasons.
|
||||
|
||||
The good consequences of this are evident: more interest in developing
|
||||
free software, more customers for free software businesses, and more
|
||||
ability to encourage companies to develop commercial free software
|
||||
instead of proprietary software products.
|
||||
|
||||
But interest in the software is growing faster than awareness of the
|
||||
philosophy it is based on, and this leads to trouble. Our ability to
|
||||
meet the challenges and threats described above depends on the will to
|
||||
stand firm for freedom. To make sure our community has this will, we
|
||||
need to spread the idea to the new users as they come into the
|
||||
community.
|
||||
|
||||
But we are failing to do so: the efforts to attract new users into our
|
||||
community are far outstripping the efforts to teach them the civics of
|
||||
our community. We need to do both, and we need to keep the two efforts
|
||||
in balance.
|
||||
|
||||
"Open Source"
|
||||
|
||||
Teaching new users about freedom became more difficult in 1998, when a
|
||||
part of the community decided to stop using the term "free software"
|
||||
and say "open source software" instead.
|
||||
|
||||
Some who favored this term aimed to avoid the confusion of "free" with
|
||||
"gratis"--a valid goal. Others, however, aimed to set aside the spirit
|
||||
of principle that had motivated the free software movement and the GNU
|
||||
project, and to appeal instead to executives and business users, many
|
||||
of whom hold an ideology that places profit above freedom, above
|
||||
community, above principle. Thus, the rhetoric of "open source"
|
||||
focuses on the potential to make high quality, powerful software, but
|
||||
shuns the ideas of freedom, community, and principle.
|
||||
|
||||
The "Linux" magazines are a clear example of this--they are filled
|
||||
with advertisements for proprietary software that works with
|
||||
GNU/Linux. When the next Motif or Qt appears, will these magazines
|
||||
warn programmers to stay away from it, or will they run ads for it?
|
||||
|
||||
The support of business can contribute to the community in many ways;
|
||||
all else being equal, it is useful. But winning their support by
|
||||
speaking even less about freedom and principle can be disastrous; it
|
||||
makes the previous imbalance between outreach and civics education
|
||||
even worse.
|
||||
|
||||
"Free software" and "open source" describe the same category of
|
||||
software, more or less, but say different things about the software,
|
||||
and about values. The GNU Project continues to use the term "free
|
||||
software", to express the idea that freedom, not just technology, is
|
||||
important.
|
||||
|
||||
Try!
|
||||
|
||||
Yoda's philosophy ("There is no `try'") sounds neat, but it doesn't
|
||||
work for me. I have done most of my work while anxious about whether I
|
||||
could do the job, and unsure that it would be enough to achieve the
|
||||
goal if I did. But I tried anyway, because there was no one but me
|
||||
between the enemy and my city. Surprising myself, I have sometimes
|
||||
succeeded.
|
||||
|
||||
Sometimes I failed; some of my cities have fallen. Then I found
|
||||
another threatened city, and got ready for another battle. Over time,
|
||||
I've learned to look for threats and put myself between them and my
|
||||
city, calling on other hackers to come and join me.
|
||||
|
||||
Nowadays, often I'm not the only one. It is a relief and a joy when I
|
||||
see a regiment of hackers digging in to hold the line, and I realize,
|
||||
this city may survive--for now. But the dangers are greater each year,
|
||||
and now Microsoft has explicitly targeted our community. We can't take
|
||||
the future of freedom for granted. Don't take it for granted! If you
|
||||
want to keep your freedom, you must be prepared to defend it.
|
||||
|
||||
Copyright (C) 1998 Richard Stallman
|
||||
|
||||
Verbatim copying and distribution of this entire article is permitted
|
||||
in any medium, provided this notice is preserved.
|
||||
531
etc/TODO
531
etc/TODO
|
|
@ -1,531 +0,0 @@
|
|||
Emacs TODO List -*-outline-*-
|
||||
|
||||
Copyright (c) 2003, 2004, 2005, 2006
|
||||
Free software Foundation, Inc.
|
||||
See the end of the file for copying permissions.
|
||||
|
||||
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:
|
||||
|
||||
** 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.
|
||||
|
||||
** whitespace-cleanup should work only on the region if the region is active.
|
||||
|
||||
** 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.
|
||||
|
||||
** 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.
|
||||
|
||||
** Modify allout.el to use overlays, like outline.el.
|
||||
|
||||
** 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.
|
||||
|
||||
* 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.
|
||||
|
||||
** 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.
|
||||
|
||||
** 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.
|
||||
|
||||
** 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.
|
||||
|
||||
** 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.
|
||||
|
||||
** 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?).
|
||||
|
||||
** 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).
|
||||
|
||||
** Provide the toolbar on ttys. This could map a bit like tmm-menubar
|
||||
for the menubar and buttons could look a bit like those used by customize.
|
||||
|
||||
** 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]
|
||||
|
||||
* Internal changes
|
||||
|
||||
** Replace gmalloc.c with the modified Doug Lea code from the current
|
||||
GNU libc so that the special mmapping of buffers can be removed --
|
||||
that apparently loses under Solaris, at least. [fx has mostly done
|
||||
this.]
|
||||
|
||||
** Rewrite make-docfile to be clean and maintainable.
|
||||
|
||||
** Add an inferior-comint-minor-mode to capture the common set of operations
|
||||
offered by major modes that offer an associated inferior
|
||||
comint-derived mode. I.e. basically make cmuscheme.el/inf-lisp.el generic.
|
||||
For use by sml-mode, python-mode, tex-mode, scheme-mode, lisp-mode,
|
||||
haskell-mode, tuareg-mode, ...
|
||||
|
||||
** 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.
|
||||
|
||||
COPYING PERMISSIONS:
|
||||
|
||||
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: b0a3e40b-726a-457d-9999-ba848321b036
|
||||
1125
etc/TUTORIAL
1125
etc/TUTORIAL
File diff suppressed because it is too large
Load diff
1197
etc/TUTORIAL.bg
1197
etc/TUTORIAL.bg
File diff suppressed because it is too large
Load diff
1029
etc/TUTORIAL.cn
1029
etc/TUTORIAL.cn
File diff suppressed because it is too large
Load diff
1047
etc/TUTORIAL.cs
1047
etc/TUTORIAL.cs
File diff suppressed because it is too large
Load diff
1490
etc/TUTORIAL.de
1490
etc/TUTORIAL.de
File diff suppressed because it is too large
Load diff
1216
etc/TUTORIAL.es
1216
etc/TUTORIAL.es
File diff suppressed because it is too large
Load diff
1203
etc/TUTORIAL.fr
1203
etc/TUTORIAL.fr
File diff suppressed because it is too large
Load diff
1120
etc/TUTORIAL.it
1120
etc/TUTORIAL.it
File diff suppressed because it is too large
Load diff
1073
etc/TUTORIAL.ja
1073
etc/TUTORIAL.ja
File diff suppressed because it is too large
Load diff
1009
etc/TUTORIAL.ko
1009
etc/TUTORIAL.ko
File diff suppressed because it is too large
Load diff
1255
etc/TUTORIAL.nl
1255
etc/TUTORIAL.nl
File diff suppressed because it is too large
Load diff
1248
etc/TUTORIAL.pl
1248
etc/TUTORIAL.pl
File diff suppressed because it is too large
Load diff
1088
etc/TUTORIAL.pt_BR
1088
etc/TUTORIAL.pt_BR
File diff suppressed because it is too large
Load diff
1117
etc/TUTORIAL.ro
1117
etc/TUTORIAL.ro
File diff suppressed because it is too large
Load diff
1162
etc/TUTORIAL.ru
1162
etc/TUTORIAL.ru
File diff suppressed because it is too large
Load diff
1106
etc/TUTORIAL.sk
1106
etc/TUTORIAL.sk
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
Loading…
Reference in a new issue