Commit a933dad1 authored by Dave Love's avatar Dave Love

#

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

This diff is collapsed.
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"
Censoring my Software
Richard Stallman
[From Datamation, 1 March 1996]
Last summer, a few clever legislators proposed a bill to "prohibit
pornography" on the Internet. Last fall, right-wing Christians made
this cause their own. Last week, President Clinton signed the bill,
and we lost the freedom of the press for the public library of the
future. This week, I'm censoring GNU Emacs.
No, GNU Emacs does not contain pornography. It is a software package,
an award-winning extensible and programmable text editor. But the law
that was passed applies to far more than pornography. It prohibits
"indecent" speech, which can include anything from famous poems, to
masterpieces hanging in the Louvre, to advice about safe sex...to
software.
Naturally, there was a lot of opposition to this bill. Not only from
people who use the Internet, and people who appreciate erotica, but
from everyone who cares about freedom of the press.
But every time we tried to tell the public what was at stake, the
forces of censorship responded with a lie: they told the public that
the issue was simply pornography. By embedding this lie as a
presupposition in their statements about the issue, they succeeded in
misinforming the public. So here I am, censoring my software.
You see, Emacs contains a version of the famous "doctor program",
a.k.a. Eliza, originally developed by Professor Weizenbaum at MIT.
This is the program that imitates a Rogerian psychotherapist. The
user talks to the program, and the program responds--by playing back
the user's own statements, and by recognizing a long list of
particular words.
The Emacs doctor program was set up to recognize many common curse
words, and respond with an appropriately cute message such as, "Would
you please watch your tongue?" or "Let's not be vulgar." In order to
do this, it had to have a list of curse words. That means the source
code for the program was indecent.
Because of the censorship law, I had to remove this feature. (I
replaced it with a message announcing that the program has been
censored for your protection.) The new version of the doctor doesn't
recognize the indecent words. If you curse at it, it curses right
back to you--for lack of knowing better.
Now that people are facing the threat of two years in prison for
indecent network postings, it would be helpful if they could access
precise rules via the Internet for how to avoid imprisonment.
However, this is impossible. The rules would have to mention the
forbidden words, so posting them on the Internet would be against the
rules.
Of course, I'm making an assumption about just what "indecent" means.
I have to do this, because nobody knows for sure. The most obvious
possibile meaning is the meaning it has for television, so I'm using
that as a tentative assumption. However, there is a good chance that
our courts will reject that interpretation of the law as
unconstitutional.
We can hope that the courts will recognize the Internet as a medium of
publication like books and magazines. If they do, they will entirely
reject any law prohibiting "indecent" publications on the Internet.
What really worries me is that the courts might take a muddled
in-between escape route--by choosing another interpretation of
"indecent", one that permits the doctor program or a statement of the
decency rules, but prohibits some of the books that children can
browse through in the public library and the bookstore. Over the
years, as the Internet replaces the public library and the bookstore,
some of our freedom of the press will be lost.
Just a few weeks ago, another country imposed censorship on the
Internet. That was China. We don't think well of China in this
country--its government doesn't respect basic freedoms. But how well
does our government respect them? And do you care enough to preserve
them here?
If you care, stay in touch with the Voters Telecommunications Watch.
Look in their Web site http://www.vtw.org/ for background information
and political action recommendations. Censorship won in February, but
we can beat it in November.
Copyright 1996 Richard Stallman
Verbatim copying and distribution is permitted in any medium
provided this notice is preserved.
#########################
## LIST OF CHARSETS
## Each line corresponds to one charset.
## The following attributes are listed in this order
## separated by a colon `:' in one line.
## CHARSET-SYMBOL-NAME,
## CHARSET-ID,
## DIMENSION (1 or 2)
## CHARS (94 or 96)
## BYTES (of multibyte form: 1, 2, 3, or 4),
## WIDTH (occupied column numbers: 1 or 2),
## DIRECTION (0:left-to-right, 1:right-to-left),
## ISO-FINAL-CHAR (character code of ISO-2022's final character)
## ISO-GRAPHIC-PLANE (ISO-2022's graphic plane, 0:GL, 1:GR)
## DESCRIPTION (describing string of the charset)
tibetan-1-column:241:2:94:4:1:0:56:0:Tibetan 1 column glyph
tibetan:252:2:94:4:2:0:55:0:Tibetan characters
lao:167:1:94:3:1:0:49:0:Lao characters (ISO10646 0E80..0EDF)
indian-1-column:240:2:94:4:1:0:54:0:Indian charset for 2-column width glypps
indian-2-column:251:2:94:4:2:0:53:0:Indian charset for 2-column width glyphs
indian-is13194:225:1:94:3:2:0:53:1:Generic Indian charset for data exchange with IS 13194
ascii-right-to-left:166:1:94:3:1:1:66:0:ASCII (left half of ISO8859-1) with right-to-left direction
chinese-cns11643-7:250:2:94:4:2:0:77:0:CNS11643 Plane 7 Chinese Traditional
chinese-cns11643-6:249:2:94:4:2:0:76:0:CNS11643 Plane 6 Chinese Traditional
chinese-cns11643-5:248:2:94:4:2:0:75:0:CNS11643 Plane 5 Chinese Traditional
chinese-cns11643-4:247:2:94:4:2:0:74:0:CNS11643 Plane 4 Chinese Traditional
chinese-cns11643-3:246:2:94:4:2:0:73:0:CNS11643 Plane 3 Chinese Traditional
ethiopic:245:2:94:4:2:0:51:0:Ethiopic characters
arabic-2-column:224:1:94:3:2:1:52:0:Arabic 2-column
arabic-1-column:165:1:94:3:1:1:51:0:Arabic 1-column
arabic-digit:164:1:94:3:1:0:50:0:Arabic digit
vietnamese-viscii-upper:163:1:96:3:1:0:50:1:VISCII1.1 upper-case
vietnamese-viscii-lower:162:1:96:3:1:0:49:1:VISCII1.1 lower-case
ipa:161:1:96:3:1:0:48:1:IPA (International Phonetic Association)
chinese-sisheng:160:1:94:3:1:0:48:0:SiSheng characters for PinYin/ZhuYin
chinese-big5-2:153:2:94:3:2:0:49:0:Big5 Level-2 Chinese traditional
chinese-big5-1:152:2:94:3:2:0:48:0:Big5 Level-1 Chinese traditional
chinese-cns11643-2:150:2:94:3:2:0:72:0:CNS11643 Plane 2 Chinese traditional
chinese-cns11643-1:149:2:94:3:2:0:71:0:CNS11643 Plane 1 Chinese traditional
japanese-jisx0212:148:2:94:3:2:0:68:0:JISX0212 Japanese supplement
korean-ksc5601:147:2:94:3:2:0:67:0:KSC5601 Korean Hangul and Hanja
japanese-jisx0208:146:2:94:3:2:0:66:0:JISX0208.1983/1990 Japanese Kanji
chinese-gb2312:145:2:94:3:2:0:65:0:GB2312 Chinese simplified
japanese-jisx0208-1978:144:2:94:3:2:0:64:0:JISX0208.1978 Japanese Kanji (so called "old JIS")
latin-iso8859-9:141:1:96:2:1:0:77:1:ISO8859-9 (Latin-5)
cyrillic-iso8859-5:140:1:96:2:1:0:76:1:ISO8859-5 (Cyrillic)
latin-jisx0201:138:1:94:2:1:0:74:0:JISX0201.1976 Japanese Roman
katakana-jisx0201:137:1:94:2:1:0:73:1:JISX0201.1976 Japanese Kana
hebrew-iso8859-8:136:1:96:2:1:1:72:1:ISO8859-8 (Hebrew)
arabic-iso8859-6:135:1:96:2:1:1:71:1:ISO8859-6 (Arabic)
greek-iso8859-7:134:1:96:2:1:0:70:1:ISO8859-7 (Greek)
thai-tis620:133:1:96:2:1:0:84:1:TIS620.2529 (Thai)
latin-iso8859-4:132:1:96:2:1:0:68:1:ISO8859-4 (Latin-4)
latin-iso8859-3:131:1:96:2:1:0:67:1:ISO8859-3 (Latin-3)
latin-iso8859-2:130:1:96:2:1:0:66:1:ISO8859-2 (Latin-2)
latin-iso8859-1:129:1:96:2:1:0:65:1:ISO8859-1 (Latin-1)
ascii:000:1:94:1:1:0:66:0:ASCII (ISO646 IRV)
This diff is collapsed.
This diff is collapsed.
Debugging GNU Emacs
Copyright (c) 1985 Richard M. Stallman.
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
copyright notice and permission notice are preserved,
and that the distributor grants the recipient permission
for further redistribution as permitted by this notice.
Permission is granted to distribute modified versions
of this document, or of portions of it,
under the above conditions, provided also that they
carry prominent notices stating who last changed them.
On 4.2 you will probably find that dbx does not work for
debugging GNU Emacs. For one thing, dbx does not keep the
inferior process's terminal modes separate from its own.
For another, dbx does not put the inferior in a separate
process group, which makes trouble when an inferior uses
interrupt input, which GNU Emacs must do on 4.2.
dbx has also been observed to have other problems,
such as getting incorrect values for register variables
in stack frames other than the innermost one.
The Emacs distribution now contains GDB, the new source-level
debugger for the GNU system. GDB works for debugging Emacs.
GDB currently runs on vaxes under 4.2 and on Sun 2 and Sun 3
systems.
** Some useful techniques
`Fsignal' is a very useful place to stop in.
All Lisp errors go through there.
It is useful, when debugging, to have a guaranteed way
to return to the debugger at any time. If you are using
interrupt-driven input, which is the default, then Emacs is using
RAW mode and the only way you can do it is to store
the code for some character into the variable stop_character:
set stop_character = 29
makes Control-] (decimal code 29) the stop character.
Typing Control-] will cause immediate stop. You cannot
use the set command until the inferior process has been started.
Put a breakpoint early in `main', or suspend the Emacs,
to get an opportunity to do the set command.
If you are using cbreak input (see the Lisp function set-input-mode),
then typing Control-g will cause a SIGINT, which will return control
to the debugger immediately unless you have done
ignore 3 (in dbx)
or handle 3 nostop noprint (in gdb)
You will note that most of GNU Emacs is written to avoid
declaring a local variable in an inner block, even in
cases where using one would be the cleanest thing to do.
This is because dbx cannot access any of the variables
in a function which has even one variable defined in an
inner block. A few functions in GNU Emacs do have variables
in inner blocks, only because I wrote them before realizing
that dbx had this problem and never rewrote them to avoid it.
I believe that GDB does not have such a problem.
** Examining Lisp object values.
When you have a live process to debug, and it has not encountered a
fatal error, you can use the GDB command `pr'. First print the value
in the ordinary way, with the `p' command. Then type `pr' with no
arguments. This calls a subroutine which uses the Lisp printer.
If you can't use this command, either because the process can't run
a subroutine or because the data is invalid, you can fall back on
lower-level commands.
Use the `xtype' command to print out the data type of the last data
value. Once you know the data type, use the command that corresponds
to that type. Here are these commands:
xint xptr xwindow xmarker xoverlay xmiscfree xintfwd xboolfwd xobjfwd
xbufobjfwd xkbobjfwd xbuflocal xbuffer xsymbol xstring xvector xframe
xwinconfig xcompiled xcons xcar xcdr xsubr xprocess xfloat xscrollbar
Each one of them applies to a certain type or class of types.
(Some of these types are not visible in Lisp, because they exist only
internally.)
Each x... command prints some information about the value, and
produces a GDB value (subsequently available in $) through which you
can get at the rest of the contents.
In general, most of the rest of the contents will be addition Lisp
objects which you can examine in turn with the x... commands.
** If GDB does not run and your debuggers can't load Emacs.
On some systems, no debugger can load Emacs with a symbol table,
perhaps because they all have fixed limits on the number of symbols
and Emacs exceeds the limits. Here is a method that can be used
in such an extremity. Do
nm -n temacs > nmout
strip temacs
adb temacs
0xd:i
0xe:i
14:i
17:i
:r -l loadup (or whatever)
It is necessary to refer to the file `nmout' to convert
numeric addresses into symbols and vice versa.
It is useful to be running under a window system.
Then, if Emacs becomes hopelessly wedged, you can create
another window to do kill -9 in. kill -ILL is often
useful too, since that may make Emacs dump core or return
to adb.
** Debugging incorrect screen updating.
To debug Emacs problems that update the screen wrong, it is useful
to have a record of what input you typed and what Emacs sent to the
screen. To make these records, do
(open-dribble-file "~/.dribble")
(open-termscript "~/.termscript")
The dribble file contains all characters read by Emacs from the
terminal, and the termscript file contains all characters it sent to
the terminal. The use of the directory `~/' prevents interference
with any other user.
If you have irreproducible display problems, put those two expressions
in your ~/.emacs file. When the problem happens, exit the Emacs that
you were running, kill it, and rename the two files. Then you can start
another Emacs without clobbering those files, and use it to examine them.
This diff is collapsed.
Protect Your Freedom to Write Programs
Join the League for Programming Freedom
(Version of February 3, 1994)
Ten years ago, programmers were allowed to write programs using all
the techniques they knew, and providing whatever features they felt
were useful. This is no longer the case. New monopolies, known as
software patents and interface copyrights, have taken away our freedom
of expression and our ability to do a good job.
"Look and feel" lawsuits attempt to monopolize well-known command
languages; some have succeeded. Copyrights on command languages
enforce gratuitous incompatibility, close opportunities for
competition, and stifle incremental improvements.
Software patents are even more dangerous; they make every design
decision in the development of a program carry a risk of a lawsuit,
with draconian pretrial seizure. It is difficult and expensive to
find out whether the techniques you consider using are patented; it is
impossible to find out whether they will be patented in the future.
The League for Programming Freedom is a grass-roots organization of
professors, students, businessmen, programmers and users dedicated to
bringing back the freedom to write programs. The League is not
opposed to the legal system that Congress expressly established for
software--copyright on individual programs. Our aim is to reverse the
recent changes that prevent programmers from doing their work.
The League works to abolish the new monopolies by publishing articles,
talking with public officials, denouncing egregious offenders, and
filing amicus curiae briefs, most notably against Lotus in its suit
against Borland. We testified twice at the recent Patent Office
hearings on software patents. We welcome suggestions for other
activities, as well as help in carrying them out.
Membership dues in the League are $42 per year for programmers,
managers and professionals; $10.50 for students; $21 for others.
Please give more if you can. The League's funds will be used for
filing briefs; for printing handouts, buttons and signs; whatever will
persuade the courts, the legislators, and the people. You may not get
anything personally for your dues--except for the freedom to write
programs. The League is a non-profit corporation, but not considered
a tax-exempt charity. However, for those self-employed in software,
the dues can be a business expense.
The League needs both activist members and members who only pay their
dues. We also greatly need additional corporate members; contact us
for information.
If you have any questions, please write to the League, phone
+1 617 621 7084, or send Internet mail to lpf@uunet.uu.net.
Chris Hofstader, President
Dean Anderson, Secretary
Aubrey Jaffer, Treasurer
Chris Hofstader can be reached at (617) 492-0023; FAX (617) 497-1632.
To join, please send a check and the following information to:
League for Programming Freedom
1 Kendall Square #143
P.O.Box 9171
Cambridge, Massachusetts 02139
(Outside the US, please send a check in US dollars on a bank
having a US correspondent bank, to save us check cashing fees.)
Your name:
The address for League mailings, a few each year; please indicate
whether it is your home address or your work address:
The company you work for, and your position:
Your phone numbers (home, work or both):
Your email address, so we can contact you for demonstrations or for
writing letters. (If you don't want us to contact you for these
things, please say so, but please give us your email address anyway
so we can save paper and postage by sending you the newsletter by email.)
Is there anything about you which would enable your endorsement of the
LPF to impress the public? For example, if you are or have been a
professor or an executive, or have written software that has a good
reputation, please tell us.
Would you like to help with LPF activities?
The corporate charter of the League for Programming Freedom states:
The purpose of the corporation is to engage in the following
activities:
1. To determine the existence of, and warn the public about
restrictions and monopolies on classes of computer programs where such
monopolies prevent or restrict the right to develop certain types of
computer programs.
2. To develop countermeasures and initiatives, in the public interest,
effective to block or otherwise prevent or restrain such monopolistic
activities including education, research, publications, public
assembly, legislative testimony, and intervention in court proceedings
involving public interest issues (as a friend of the court).
3. To engage in any business or other activity in service of and
related to the foregoing paragraphs that lawfully may be carried on
by a corporation organized under Chapter 180 of the Massachusetts
General Laws.
The officers and directors of the League will be elected annually by
the members.
User-visible changes to mh-e in version 5.0 from 4.1.
Note: This being a major release, there are many internal changes.
This document lists only changes to the external interfaces of mh-e.
When upgrading, you must either explicitly reload the new versions of
all mh-e files that are already loaded or restart your Emacs.
mh-e 5.0.1 contains minor changes from mh-e 5.0 to integrate it with
Emacs 19.29.
mh-e 5.0.2 contains additional minor changes to integrate it with
reporter.el (requires reporter.el version 3.1c or later) and Emacs
19.30. The mh-goto-msg function is much faster, which also speeds up
several other operations.
Major Changes and New Features in mh-e
======================================
The emphasis for this release has been on consistency and
documentation. Many documentation strings were enhanced.
Documentation strings were changed to comments for internal functions
and variables.
There is now proper documentation in the form of a 75-page users
manual. The Texinfo source is mh-e.texi; the formatted Info document
is mh-e.info.
There is a new command `mh-update-sequences', which updates MH's
idea of what messages are in the Unseen sequence and what is the current
folder and message. `mh-quit' calls it. While `mh-execute-commands'
has always done this updating as a side effect, the new function is
faster.
The MH profile entry "Inbox:" is supported.
If the show-buffer is modified, the user is queried before mh-e
reuses the buffer to show a different message. This buffer is also
auto-saved and backed up correctly.
`mh-store-buffer' is significantly more robust. It now handles
messages created by a wide variety of packaging software. The status
message for `uudecode' includes the name of the file created. An error
is signaled if the subprocess exits with a non-zero status.
`mh-search-folder' behaves predictably, adding messages found to the
`search' sequence. It correctly handles the case of no messages found.
`mh-burst-digest' (`M-b') now only rescans the part of the folder
affected by the burst. It is now much faster in a large folder.
New mh-e Hooks and Customization Variables
==========================================
`mh-default-folder-for-message-function': new name for the old
`mh-msg-folder-hook', which wasn't a hook. The old name was confusing,
leading people to think they could use `add-hook' with it, when
actually `setq' is the correct way.
`mh-sortm-args': When this variable is used has changed. Now
`mh-sortm-args' is passed if there IS a prefix argument to
`mh-sort-folder'. The assumption is that for arguments you normally
want, you would specify them in an MH profile entry.
`mh-mhn-args': new hook, a list of additional arguments to pass to
the `mhn' program if `mh-edit-mhn' is given a prefix argument.
`mh-edit-mhn-hook': new hook called by `mh-edit-mhn', the function
that formats MIME messages.
`mh-folder-list-change-hook': new hook, called whenever the cached
list of folders, `mh-folder-list', is changed.
`mh-find-path-hook': new hook, called when entering mh-e.
`mh-repl-formfile': new variable, used to change the format file
used by `mh-reply' from the default of "replcomps".
New variables to customize the scan format and notating:
`mh-note-deleted', `mh-note-refiled', `mh-note-seq', `mh-note-cur',
`mh-note-copied', `mh-note-printed'.