sc: Reply Buffer Initialization
6.1 Reply Buffer Initialization
===============================
Executing ‘sc-cite-original’ performs the following steps as it
initializes the reply buffer:
1. _Runs ‘sc-pre-hook’._ This hook variable is run before
‘sc-cite-original’ does any other work. You could conceivably use
this hook to set certain Supercite variables based on the reply
buffer’s mode or name (i.e., to do something different based on
whether you are replying or following up to an article).
2. _Inserts Supercite’s keymap._ Supercite provides a number of
commands for performing post-yank modifications to the reply
buffer. These commands are installed on Supercite’s top-level
keymap. Since Supercite has to interface with a wide variety of
MUAs, it does not install all of its commands directly into the
reply buffer’s keymap. Instead, it puts its commands on a keymap
prefix, then installs this prefix onto the buffer’s keymap. What
this means is that you typically have to type more characters to
invoke a Supercite command, but Supercite’s key bindings can be
made much more consistent across MUAs.
You can control what key Supercite uses as its keymap prefix by
changing the variable ‘sc-mode-map-prefix’. By default, this
variable is set to ‘C-c C-p’; a finger twister perhaps, but
unfortunately the best default due to the scarcity of available key
bindings in many MUAs.
3. _Turns on Supercite minor mode._ The modeline of the reply buffer
should indicate that Supercite is active in that buffer by
displaying the string ‘SC’.
4. _Sets the “Undo Boundary.”_ Supercite sets an undo boundary before
it begins to modify the original yanked text. This allows you to
easily undo Supercite’s changes to affect alternative citing
styles.
5. _Processes the mail headers._ All previously retrieved info
key-value pairs are deleted from the info alist, then the mail
headers in the body of the yanked message are scanned. Info
key-value pairs are created for each header found. Also, such
useful information as the author’s name and email address are
extracted. If the variable ‘sc-mail-warn-if-non-rfc822-p’ is
non-‘nil’, then Supercite will warn you if it finds a mail header
that does not conform to RFC822. This is rare and indicates a
problem either with your MUA or the original author’s MUA, or some
MTA (mail transport agent) along the way.
Once the info keys have been extracted from the mail headers, the
headers are nuked from the reply buffer. You can control exactly
which headers are removed or kept, but by default, all headers are
removed.
There are two variables which control mail header nuking. The
variable ‘sc-nuke-mail-headers’ controls the overall behavior of
the header nuking routines. By setting this variable to ‘'all’,
you automatically nuke all mail headers. Likewise, setting this
variable to ‘'none’ inhibits nuking of any mail headers. In
between these extremes, you can tell Supercite to nuke only a
specified list of mail headers by setting this variable to
‘'specified’, or to keep only a specified list of headers by
setting it to ‘'keep’.
If ‘sc-nuke-mail-headers’ is set to ‘'specified’ or ‘'keep’, then
the variable ‘sc-nuke-mail-header-list’ is consulted for the list
of headers to nuke or keep. This variable contains a list of
regular expressions. If the mail header line matches a regular
expression in this list, the header will be nuked or kept. The
line is matched against the regexp using ‘looking-at’ rooted at the
beginning of the line.
If the variable ‘sc-blank-lines-after-headers’ is non-‘nil’, it
contains the number of blank lines remaining in the buffer after
mail headers are nuked. By default, only one blank line is left in
the buffer.
6. _Selects the attribution and citation strings._ Once the mail
headers have been processed, Supercite selects a attribution string
and a citation string which it will use to cite the original
message. Selecting an Attribution, for details.
7. _Cites the message body._ After the selection of the attribution
and citation strings, Supercite cites the original message by
inserting the citation string prefix in front of every uncited
line. You may not want Supercite to automatically cite very long
messages however. For example, some email could contain a smaller
header section followed by a huge uuencoded message. It wouldn’t
make sense to cite the uuencoded message part when responding to
the original author’s short preface. For this reason, Supercite
provides a variable which limits the automatic citation of long
messages to a certain maximum number of lines. The variable is
called ‘sc-cite-region-limit’. If this variable contains an
integer, messages with more lines that this will not be cited at
all, and a warning message will be displayed. Supercite has
performed everything necessary, though, for you to manually cite
only the small portion of the original message that you want to
use.
If ‘sc-cite-region-limit’ contains a non-‘nil’ value, the original
message will always be cited, regardless of its size. If the
variable contains the value ‘nil’, the region will never be cited
automatically. Use this if you always want to be able to edit and
cite the message manually.
The variable ‘sc-cite-blank-lines-p’ controls whether blank lines
in the original message should be cited or not. If this variable
is non-‘nil’, blank lines will be cited just like non-blank lines.
Otherwise, blank lines will be treated as paragraph separators.
Citing of the original message is highly configurable. Supercite’s
default setup does a pretty good job of citing many common forms of
previously cited messages. But there are as many citation styles
out there as people on the net, or just about! It would be
impossible for Supercite to anticipate every style in existence,
and you probably wouldn’t encounter them all anyway. But you can
configure Supercite to recognize those styles you see often.
Configuring the Citation Engine, for details.
8. _Runs ‘sc-post-hook’._ This variable is very similar to
‘sc-pre-hook’, except that it runs after ‘sc-cite-original’ is
finished. This hook is provided mostly for completeness and
backward compatibility. Perhaps it could be used to reset certain
variables set in ‘sc-pre-hook’.