(FRAME_RIGHT_SCROLL_BAR_WIDTH): New define.
[bpt/emacs.git] / man / sc.texi
CommitLineData
6bf7aab6
DL
1\input texinfo @comment -*-texinfo-*-
2@comment 3.47
3@comment %**start of header (This is for running Texinfo on a region.)
4@setfilename ../info/sc
5@settitle Supercite Version 3.1 User's Manual
6@iftex
7@finalout
8@end iftex
9
4c2ca4f3 10@dircategory Emacs
6bf7aab6
DL
11@direntry
12* SC: (sc). Supercite lets you cite parts of messages you're
13 replying to, in flexible ways.
14@end direntry
15
16@c @setchapternewpage odd % For book style double sided manual.
17@comment %**end of header (This is for running Texinfo on a region.)
18@c @smallbook
19@tex
20\overfullrule=0pt
21%\global\baselineskip 30pt % For printing in double spaces
22@end tex
23@ifinfo
24This document describes the Supercite Version 3.1 package for citing and
25attributing the replies for various GNU Emacs mail and news reading
26subsystems.
27
28Copyright @copyright{} 1993 Barry A@. Warsaw
29
30Permission is granted to make and distribute verbatim copies of
31this manual provided the copyright notice and this permission notice
32are preserved on all copies.
33
34@ignore
35Permission is granted to process this file through TeX and print the
36results, provided the printed document carries copying permission
37notice identical to this one except for the removal of this paragraph
38(this paragraph not being relevant to the printed manual).
39
40@end ignore
41@end ifinfo
42@c
43@titlepage
44@sp 6
45@center @titlefont{Supercite User's Manual}
46@sp 2
47@center @titlefont{Supercite Version 3.1}
48@sp 4
49@center Manual Revision: 3.47
50@center August 1993
51@sp 5
52@center Barry A@. Warsaw
53@center @t{bwarsaw@@cen.com}
54@center @t{@dots{}!uunet!cen.com!bwarsaw}
55@page
56@vskip 0pt plus 1filll
57Copyright @copyright{} 1993 Barry A@. Warsaw
58
59Permission is granted to make and distribute verbatim copies of
60this manual provided the copyright notice and this permission notice
61are preserved on all copies.
62
63@end titlepage
64@page
65@ifinfo
66@node Top, Introduction, (dir), (dir)
67@comment node-name, next, previous, up
68
69This document describes the Supercite Version 3.1 package for citing and
70attributing the replies for various GNU Emacs mail and news reading
71subsystems. The manual is divided into the following chapters.
72
73@menu
74* Introduction::
75* Citations::
76* Getting Connected::
77* Replying and Yanking::
78* Selecting an Attribution::
79* Configuring the Citation Engine::
80* Post-yank Formatting Commands::
81* Information Keys and the Info Alist::
82* Reference Headers::
83* Hints to MUA Authors::
84* Version 3 Changes::
85* Thanks and History::
86* The Supercite Mailing List::
87
88* Concept Index::
89* Command Index::
90* Key Index::
91* Variable Index::
92@end menu
93@end ifinfo
94
95@node Introduction, Usage Overview, Top, Top
96@comment node-name, next, previous, up
97@chapter Introduction
98@ifinfo
99
100@end ifinfo
101Supercite version 3.1 is a GNU Emacs package written entirely in Emacs
102Lisp. It interfaces to most of the commonly used Emacs mail user agents
103(@dfn{MUAs}) and news user agents (@dfn{NUAs}), and provides
104sophisticated facilities for the citing and attributing of message
105replies. Supercite has a very specific and limited role in the process
106of composing replies to both USENET network news and electronic mail.
107
108The preferred way to spell Supercite is with a capital @samp{S},
109lowercase @samp{upercite}. There are a few alternate spellings out there
110and I won't be terribly offended if you use them. People often ask
111though@dots{}
112
113@ifinfo
114@menu
115* Usage Overview::
116* What Supercite Does Not Do::
117* What Supercite Does::
118@end menu
119@end ifinfo
120
121@cindex MUA
122@cindex NUA
123Supercite is only useful in conjunction with MUAs and NUAs such as VM,
124GNUS, RMAIL, etc@. (hereafter referred to collectively as MUAs).
125Supercite is typically called by the MUA after a reply buffer has been
126setup. Thereafter, Supercite's many commands and formatting styles are
127available in that reply buffer until the reply is sent. Supercite is
128re-initialized in each new reply buffer.
129
130Supercite is currently at major revision 3.1, and is known to work in the
131following environments:
132
133@table @asis
134@item Emacs versions:
135 GNU Emacs 18.57 through 18.59, all Emacs 19,
136 all current Lucid Emacs, and Epoch 4.@refill
137
138@item MUAs:
139 VM 4.37 and beyond (including VM version 5), RMAIL, MH-E 3.7 and
140 beyond, PCMAIL.@refill
141
142@item NUAs:
143 RNEWS, GNUS 3.12 and beyond, GNEWS.@refill
144
145@end table
146For systems with version numbers, all known subsequent versions also
147work with Supercite. For those systems without version numbers,
148Supercite probably works with any recently released version. Note that
149only some of these systems will work with Supercite ``out of the box.''
150All others must overload interfacing routines to supply the necessary
151glue. @xref{Getting Connected}, for more details.@refill
152
153
154@node Usage Overview, What Supercite Does Not Do, Introduction, Introduction
155@comment node-name, next, previous, up
156@kindex r
157@kindex f
158@kindex C-c C-y
159@cindex yank
160@cindex cite, citing
161@cindex attribute, attributing
162@comment
163@section Usage Overview
164@ifinfo
165
166@end ifinfo
167Typical usage is as follows. You want to reply or followup to a message
168in your MUA. You will probably hit @kbd{r} (i.e., ``reply'') or @kbd{f}
169(i.e., ``forward'') to begin composing the reply. In response, the MUA
170will create a reply buffer and initialize the outgoing mail headers
171appropriately. The body of the reply will usually be empty at this
172point. You now decide that you would like to include part of the
173original message in your reply. To do this, you @dfn{yank} the original
174message into the reply buffer, typically with a key stroke such as
175@kbd{C-c C-y}. This sequence will invoke an MUA-specific function which
176fills the body of the reply with the original message and then
177@dfn{attributes} this text to its author. This is called @dfn{citing}
178and its effect is to prefix every line from the original message with a
179special text tag. Most MUAs provide some default style of citing; by
180using Supercite you gain a wider flexibility in the look and style of
181citations. Supercite's only job is to cite the original message.
182
183@node What Supercite Does Not Do, What Supercite Does, Usage Overview, Introduction
184@comment node-name, next, previous, up
185@section What Supercite Doesn't Do
186@ifinfo
187
188@end ifinfo
189Because of this clear division of labor, there are useful features which
190are the sole responsibility of the MUA, even though it might seem that
191Supercite should provide them. For example, many people would like to
192be able to yank (and cite) only a portion of the original message.
193Since Supercite only modifies the text it finds in the reply buffer as
194set up by the MUA, it is the MUA's responsibility to do partial yanking.
195@xref{Reply Buffer Initialization}.@refill
196
197@vindex mail-header-separator
198@comment
199Another potentially useful thing would be for Supercite to set up the
200outgoing mail headers with information it gleans from the reply buffer.
201But by previously agreed upon convention, any text above the
202@code{mail-header-separator} which separates mail headers from message
203bodies cannot be modified by Supercite. Supercite, in fact, doesn't
204know anything about the meaning of these headers, and never ventures
205outside the designated region. @xref{Hints to MUA Authors}, for more
206details.@refill
207
208@node What Supercite Does, Citations, What Supercite Does Not Do, Introduction
209@comment node-name, next, previous, up
210@findex sc-cite-original
211@section What Supercite Does
212@ifinfo
213
214@end ifinfo
215Supercite is invoked for the first time on a reply buffer via your MUA's
216reply or forward command. This command will actually perform citations
217by calling a hook variable to which Supercite's top-level function
218@code{sc-cite-original} has been added. When @code{sc-cite-original} is
219executed, the original message must be set up in a very specific way,
220but this is handled automatically by the MUA. @xref{Hints to MUA
221Authors}.@refill
222
223@cindex info alist
224The first thing Supercite does, via @code{sc-cite-original}, is to parse
225through the original message's mail headers. It saves this data in an
226@dfn{information association list}, or @dfn{info alist}. The information
227in this list is used in a number of places throughout Supercite.
228@xref{Information Keys and the Info Alist}.@refill
229
230@cindex nuking mail headers
231@cindex reference header
232After the mail header info is extracted, the headers are optionally
233removed (@dfn{nuked}) from the reply. Supercite then writes a
234@dfn{reference header} into the buffer. This reference header is a
235string carrying details about the citation it is about to perform.
236
237@cindex modeline
238Next, Supercite visits each line in the reply, transforming the line
239according to a customizable ``script''. Lines which were not previously
240cited in the original message are given a citation, while already cited
241lines remain untouched, or are coerced to your preferred style.
242Finally, Supercite installs a keymap into the reply buffer so that you
243have access to Supercite's post-yank formatting and reciting commands as
244you subsequently edit your reply. You can tell that Supercite has been
245installed into the reply buffer because that buffer's modeline will
246display the minor mode string @samp{SC}.
247
248@cindex filladapt
249@cindex gin-mode
250@vindex fill-prefix
251@findex fill-paragraph
252@comment
253When the original message is cited by @code{sc-cite-original}, it will
254(optionally) be filled by Supercite. However, if you manually edit the
255cited text and want to re-fill it, you must use an add-on package such
256as @cite{filladapt} or @cite{gin-mode}. These packages can recognize
257Supercited text and will fill them appropriately. Emacs' built-in
258filling routines, e.g@. @code{fill-paragraph}, do not recognize cited
259text and will not re-fill them properly because it cannot guess the
260@code{fill-prefix} being used.
261@xref{Post-yank Formatting Commands}, for details.@refill
262
263As mentioned above, Supercite provides commands to recite or uncite
264regions of text in the reply buffer, and commands to perform other
265beautifications on the cited original text, maintaining consistent and
266informative citations throughout. Supercite tries to be as configurable
267as possible to allow for a wide range of personalized citation styles,
268but it is also immediately useful with the default configuration, once
269it has been properly connected to your MUA. @xref{Getting Connected},
270for more details.@refill
271
272@node Citations, Citation Elements, What Supercite Does, Top
273@comment node-name, next, previous, up
274@cindex nested citations
275@cindex citation
276@comment
277@chapter Citations
278@ifinfo
279
280@end ifinfo
281A @dfn{citation} is the acknowledgement of the original author of a mail
282message in the body of the reply. There are two basic citation styles
283which Supercite supports. The first, called @dfn{nested citations} is
284an anonymous form of citation; in other words, an indication is made
285that the cited line was written by someone @emph{other} that the current
286message author (i.e., other than you, the person composing the reply),
287but no reference is made as to the identity of the original author.
288This style should look familiar since its use on the net is widespread.
289Here's an example of what a message buffer would look like using nested
290citations after multiple replies:
291
292@example
293>> John originally wrote this
294>> and this as well
295> Jane said that John didn't know
296> what he was talking about
297And that's what I think too.
298@end example
299
300@ifinfo
301@menu
302* Citation Elements::
303* Recognizing Citations::
304@end menu
305@end ifinfo
306
307Note that multiple inclusions of the original messages result in a
308nesting of the @samp{@code{>}} characters. This can sometimes be quite
309confusing when many levels of citations are included since it may be
310difficult or impossible to figure out who actually participated in the
311thread, and multiple nesting of @samp{@code{>}} characters can sometimes
312make the message very difficult for the eye to scan.
313
314@cindex non-nested citations
315In @dfn{non-nested citations}, each cited line begins with an
316informative string attributing that line to the original author. Only
317the first level of attribution will be shown; subsequent citations don't
318nest the citation strings. The above dialog might look like this when
319non-nested citations are used:
320
321@example
322John> John originally wrote this
323John> and this as well
324Jane> Jane said that John didn't know
325Jane> what he was talking about
326And that's what I think too.
327@end example
328
329Notice here that my inclusion of Jane's inclusion of John's original
330message did not result in a line cited with @samp{Jane>John>}.
331
332@vindex sc-nested-citation-p
333@vindex nested-citation-p (sc-)
334Supercite supports both styles of citation, and the variable
335@code{sc-nested-citation-p} controls which style it will use when citing
336previously uncited text. When this variable is @code{nil} (the default),
337non-nested citations are used. When non-@code{nil}, nested citations
338are used.
339
340
341@node Citation Elements, Recognizing Citations, Citations, Citations
342@comment node-name, next, previous, up
343@cindex citation string
344@comment
345@section Citation Elements
346@ifinfo
347
348@end ifinfo
349@dfn{Citation strings} are composed of one or more elements. Non-nested
350citations are composed of four elements, three of which are directly
351user definable. The elements are concatenated together, in this order:
352
353@cindex citation leader
354@vindex citation-leader (sc-)
355@vindex sc-citation-leader
356@enumerate
357@item
358The @dfn{citation leader}. The citation leader is contained in the
359variable @code{sc-citation-leader}, and has the default value of a
360string containing four spaces.
361
362@cindex attribution string
363@item
364The @dfn{attribution string}. This element is supplied automatically by
365Supercite, based on your preferences and the original message's mail
366headers, though you may be asked to confirm Supercite's choice.
367@xref{Selecting an Attribution}, for more details.@refill
368
369@cindex citation delimiter
370@vindex sc-citation-delimiter
371@vindex citation-delimiter (sc-)
372@item
373The @dfn{citation delimiter}. This string, contained in the variable
374@code{sc-citation-delimiter} visually separates the citation from the
375text of the line. This variable has a default value of @code{">"} and
376for best results, the string should consist of only a single character.
377
378@cindex citation separator
379@vindex citation-separator (sc-)
380@vindex sc-citation-separator
381@item
382The @dfn{citation separator}. The citation separator is contained in
383the variable @code{sc-citation-separator}, and has the default value of
384a string containing a single space.
385@end enumerate
386
387For example, suppose you were using the default values for the above
388variables, and Supercite provided the attribution string @samp{Jane}.
389In this case, the composed, non-nested citation string used might be
390something like
391@code{@asis{" Jane> "}}.
392This citation string will be inserted in front of
393every line in the original message that is not already cited.@refill
394
395Nested citations, being simpler than non-nested citations, are composed
396of the same elements, sans the attribution string. Supercite is smart
397enough to not put additional spaces between citation delimiters for
398multi-level nested citations.
399
400@node Recognizing Citations, Getting Connected, Citation Elements, Citations
401@comment node-name, next, previous, up
402@section Recognizing Citations
403@ifinfo
404
405@end ifinfo
406Supercite also recognizes citations in the original article, and can
407transform these already cited lines in a number of ways. This is how
408Supercite suppresses the multiple citing of non-nested citations.
409Recognition of cited lines is controlled by variables analogous to those
410that make up the citation string as mentioned previously.
411
412@vindex sc-citation-leader-regexp
413@vindex citation-leader-regexp (sc-)
414@vindex sc-citation-delimiter-regexp
415@vindex citation-delimiter-regexp (sc-)
416@vindex sc-citation-separator-regexp
417@vindex citation-separator-regexp (sc-)
418@vindex sc-citation-root-regexp
419@vindex citation-root-regexp (sc-)
420@vindex sc-citation-nonnested-root-regexp
421@vindex citation-nonnested-root-regexp (sc-)
422
423The variable @code{sc-citation-leader-regexp} describes how citation
424leaders can look, by default it matches any number of spaces or tabs.
425Note that since the lisp function @code{looking-at} is used to do the
426matching, if you change this variable it need not start with a leading
427@code{"^"}.
428
429Similarly, the variables @code{sc-citation-delimiter-regexp} and
430@code{sc-citation-separator-regexp} respectively describe how citation
431delimiters and separators can look. They follow the same rule as
432@code{sc-citation-leader-regexp} above.
433
434When Supercite composes a citation string, it provides the attribution
435automatically. The analogous variable which handles recognition of the
436attribution part of citation strings is @code{sc-citation-root-regexp}.
437This variable describes the attribution root for both nested and
438non-nested citations. By default it can match zero-to-many alphanumeric
439characters (also ``.'', ``-'', and ``_''). But in some situations,
440Supercite has to determine whether it is looking at a nested or
441non-nested citation. Thus the variable
442@code{sc-citation-nonnested-root-regexp} is used to describe only
443non-nested citation roots. It is important to remember that if you
444change @code{sc-citation-root-regexp} you should always also change
445@code{sc-citation-nonnested-root-regexp}.@refill
446
6bf7aab6
DL
447@node Information Keys and the Info Alist, Reference Headers, Miscellaneous Commands, Top
448@comment node-name, next, previous, up
449@cindex information keys
450@cindex Info Alist
451@cindex information extracted from mail fields
452@findex sc-mail-field
453@findex mail-field (sc-)
454@comment
455@chapter Information Keys and the Info Alist
456@ifinfo
457
458@end ifinfo
459@dfn{Mail header information keys} are nuggets of information that
460Supercite extracts from the various mail headers of the original
461message, placed in the reply buffer by the MUA. Information is kept in
462the @dfn{Info Alist} as key-value pairs, and can be retrieved for use in
463various places within Supercite, such as in header rewrite functions and
464attribution selection. Other bits of data, composed and created by
465Supercite, are also kept as key-value pairs in this alist. In the case
466of mail fields, the key is the name of the field, omitting the trailing
467colon. Info keys are always case insensitive (as are mail headers), and
468the value for a corresponding key can be retrieved from the alist with
469the @code{sc-mail-field} function. Thus, if the following fields were
470present in the original article:@refill
471
472@example
473Date:@: 08 April 1991, 17:32:09 EST
474Subject:@: Better get out your asbestos suit
475@end example
476
477@vindex sc-mumble
478@vindex mumble (sc-)
479@noindent
480then, the following lisp constructs return:
481
482@example
483(sc-mail-field "date")
484==> "08 April 1991, 17:32:09 EST"
485
486(sc-mail-field "subject")
487==> "Better get out your asbestos suit"
488@end example
489
490Since the argument to @code{sc-mail-field} can be any string, it is
491possible that the mail field will not be present on the info alist
492(possibly because the mail header was not present in the original
493message). In this case, @code{sc-mail-field} will return the value of
494the variable @code{sc-mumble}.
495
496Supercite always places all mail fields found in the yanked original
497article into the info alist. If possible, Supercite will also places
498the following keys into the info alist:
499
500@table @code
501@cindex sc-attribution info field
502@cindex attribution info field (sc-)
503@item "sc-attribution"
504the selected attribution string.
505
506@cindex sc-citation info field
507@cindex citation info field (sc-)
508@item "sc-citation"
509the non-nested citation string.
510
511@cindex sc-from-address info field
512@cindex from-address info field (sc-)
513@item "sc-from-address"
514email address extracted from the @samp{From:@:} field.
515
516@cindex sc-reply-address info field
517@cindex reply-address info field (sc-)
518@item "sc-reply-address"
519email address extracted from the @samp{Reply-To:@:} field.
520
521@cindex sc-sender-address info field
522@cindex sender-address info field (sc-)
523@item "sc-sender-address"
524email address extracted from the @samp{Sender:@:} field.
525
526@cindex sc-emailname info field
527@cindex emailname info field (sc-)
528@item "sc-emailname"
529email terminus extracted from the @samp{From:@:} field.
530
531@cindex sc-initials info field
532@cindex initials info field (sc-)
533@item "sc-initials"
534the author's initials.
535
536@cindex sc-author info field
537@cindex author info field (sc-)
538@item "sc-author"
539the author's full name.
540
541@cindex sc-firstname info field
542@cindex firstname info field (sc-)
543@item "sc-firstname"
544the author's first name.
545
546@cindex sc-lastname info field
547@cindex lastname info field (sc-)
548@item "sc-lastname"
549the author's last name.
550
551@cindex sc-middlename-1 info field
552@cindex middlename-1 info field (sc-)
553@item "sc-middlename-1"
554the author's first middle name.
555@end table
556
557If the author's name has more than one middle name, they will appear as
558info keys with the appropriate index (e.g., @code{"sc-middlename-2"},
559@dots{}). @xref{Selecting an Attribution}.@refill
560
561@node Reference Headers, The Built-in Header Rewrite Functions, Information Keys and the Info Alist, Top
562@comment node-name, next, previous, up
563@cindex reference headers
564@chapter Reference Headers
565@ifinfo
566
567@end ifinfo
568Supercite will insert an informative @dfn{reference header} at the
569beginning of the cited body of text, which display more detail about the
570original article and provides the mapping between the attribution and
571the original author in non-nested citations. Whereas the citation
572string usually only contains a portion of the original author's name,
573the reference header can contain such information as the author's full
574name, email address, the original article's subject, etc. In fact any
575information contained in the info alist can be inserted into a reference
576header.
577
578@ifinfo
579@menu
580* The Built-in Header Rewrite Functions::
581* Electric References::
582@end menu
583@end ifinfo
584
585@cindex header rewrite functions
586@vindex sc-rewrite-header-list
587@vindex rewrite-header-list (sc-)
588There are a number of built-in @dfn{header rewrite functions} supplied
589by Supercite, but you can write your own custom header rewrite functions
590(perhaps using the built-in ones as examples). The variable
591@code{sc-rewrite-header-list} contains the list of such header rewrite
592functions. This list is consulted both when inserting the initial
593reference header, and when displaying @dfn{electric references}.
594@xref{Electric References}.
595
596@vindex sc-preferred-header-style
597@vindex preferred-header-style (sc-)
598When Supercite is initially run on a reply buffer (via
599@code{sc-cite-original}), it will automatically call one of these
600functions. The one it uses is defined in the variable
601@code{sc-preferred-header-style}. The value of this variable is an
602integer which is an index into the @code{sc-rewrite-header-list},
603beginning at zero.
604
605@node The Built-in Header Rewrite Functions, Electric References, Reference Headers, Reference Headers
606@comment node-name, next, previous, up
607@cindex header rewrite functions, built-in
608@comment
609@section The Built-in Header Rewrite Functions
610@ifinfo
611
612@end ifinfo
613Below are examples of the various built-in header rewrite functions.
614Please note the following:@: first, the text which appears in the
615examples below as @var{infokey} indicates that the corresponding value
616of the info key from the info alist will be inserted there.
617(@pxref{Information Keys and the Info Alist}). For example, in @code{sc-header-on-said}
618below, @var{date} and @var{from} correspond to the values of the
619@samp{Date:@:} and @samp{From:@:} mail headers respectively.@refill
620
621@vindex sc-reference-tag-string
622@vindex reference-tag-string (sc-)
623Also, the string @code{">>>>>"} below is really the value of the
624variable @code{sc-reference-tag-string}. This variable is used in all
625built-in header rewrite functions, and you can customize its value to
626change the tag string globally.
627
628Finally, the references headers actually written may omit certain parts
629of the header if the info key associated with @var{infokey} is not
630present in the info alist. In fact, for all built-in headers, if the
631@samp{From:@:} field is not present in the mail headers, the entire
632reference header will be omitted (but this usually signals a serious
633problem either in your MUA or in Supercite's installation).
634
635@table @code
636@findex sc-no-header
637@findex no-header (sc-)
638@item sc-no-header
639This function produces no header. It should be used instead of
640@code{nil} to produce a blank header. This header can possibly contain
641a blank line after the @code{mail-header-separator} line.
642
643@item sc-no-blank-line-or-header
644@findex sc-no-blank-line-or-header
645@findex no-blank-line-or-header (sc-)
646This function is similar to @code{sc-no-header} except that any blank
647line after the @code{mail-header-separator} line will be removed.
648
649@item sc-header-on-said
650@findex sc-header-on-said
651@findex header-on-said (sc-)
652@code{>>>>> On @var{date}, @var{from} said:}
653
654@item sc-header-inarticle-writes
655@findex sc-header-inarticle-writes
656@findex header-inarticle-writes (sc-)
657@code{>>>>> In article @var{message-id}, @var{from} writes:}
658
659@item sc-header-regarding-adds
660@findex sc-header-regarding-adds
661@findex header-regarding-adds (sc-)
662@code{>>>>> Regarding @var{subject}; @var{from} adds:}
663
664@item sc-header-attributed-writes
665@findex sc-header-attributed-writes
666@findex header-attributed-writes (sc-)
667@code{>>>>> "@var{sc-attribution}" == @var{sc-author} <@var{sc-reply-address}> writes:}
668
669@item sc-header-author-writes
670@findex sc-header-author-writes
671@findex header-author-writes (sc-)
672@code{>>>>> @var{sc-author} writes:}
673
674@item sc-header-verbose
675@findex sc-header-verbose
676@findex header-verbose (sc-)
677@code{>>>>> On @var{date},}@*
678@code{>>>>> @var{sc-author}}@*
679@code{>>>>> from the organization of @var{organization}}@*
680@code{>>>>> who can be reached at:@: @var{sc-reply-address}}@*
681@code{>>>>> (whose comments are cited below with:@: "@var{sc-cite}")}@*
682@code{>>>>> had this to say in article @var{message-id}}@*
683@code{>>>>> in newsgroups @var{newsgroups}}@*
684@code{>>>>> concerning the subject of @var{subject}}@*
685@code{>>>>> see @var{references} for more details}
686@end table
687
688@node Electric References, Hints to MUA Authors, The Built-in Header Rewrite Functions, Reference Headers
689@comment node-name, next, previous, up
690@cindex electric references
691@section Electric References
692@ifinfo
693
694@end ifinfo
695By default, when Supercite cites the original message for the first
696time, it just goes ahead and inserts the reference header indexed by
697@code{sc-preferred-header-style}. However, you may want to select
698different reference headers based on the type of reply or forwarding you
699are doing. You may also want to preview the reference header before
700deciding whether to insert it into the reply buffer or not. Supercite
701provides an optional @dfn{electric reference} mode which you can drop
702into to give you this functionality.
703
704@vindex sc-electric-references-p
705@vindex electric-references-p (sc-)
706If the variable @code{sc-electric-references-p} is non-@code{nil},
707Supercite will bring up an electric reference mode buffer and place you
708into a recursive edit. The electric reference buffer is read-only, so
709you cannot directly modify the reference text until you exit electric
710references and insert the text into the reply buffer. But you can cycle
711through all the reference header rewrite functions in your
712@code{sc-rewrite-header-list}.
713
714You can also set a new preferred header style, jump to any header, or
715jump to the preferred header. The header will be shown in the electric
716reference buffer and the header index and function name will appear in
717the echo area.
718
719The following commands are available while in electric reference mode
720(shown here with their default key bindings):
721
722@table @asis
723@item @code{sc-eref-next} (@kbd{n})
724@findex sc-eref-next
725@findex eref-next (sc-)
726@kindex n
727@vindex sc-electric-circular-p
728@vindex electric-circular-p (sc-)
729Displays the next reference header in the electric reference buffer. If
730the variable @code{sc-electric-circular-p} is non-@code{nil}, invoking
731@code{sc-eref-next} while viewing the last reference header in the list
732will wrap around to the first header.@refill
733
734@item @code{sc-eref-prev} (@kbd{p})
735@findex sc-eref-prev
736@findex eref-prev (sc-)
737@kindex p
738Displays the previous reference header in the electric reference buffer.
739If the variable @code{sc-electric-circular-p} is non-@code{nil},
740invoking @code{sc-eref-prev} will wrap around to the last header.@refill
741
742@item @code{sc-eref-goto} (@kbd{g})
743@findex sc-eref-goto
744@findex eref-goto (sc-)
745@kindex g
746Goes to a specified reference header. The index (into the
747@code{sc-rewrite-header-list}) can be specified as a numeric argument to
748the command. Otherwise, Supercite will query you for the index in the
749minibuffer.@refill
750
751@item @code{sc-eref-jump} (@kbd{j})
752@findex sc-eref-jump
753@findex eref-jump (sc-)
754@kindex j
755Display the preferred reference header, i.e., the one indexed by the current
756value of @code{sc-preferred-header-style}.
757
758@item @code{sc-eref-setn} (@kbd{s})
759@findex sc-eref-setn
760@findex eref-setn (sc-)
761@kindex s
762Set the preferred reference header (i.e.,
763@code{sc-preferred-header-style}) to the currently displayed header.@refill
764
765@item @code{sc-eref-exit} (@kbd{C-j}, @key{RET}, and @key{ESC C-c})
766@kindex RET
767@kindex C-j
768@kindex q
769@findex sc-eref-exit
770@findex eref-exit (sc-)
771Exit from electric reference mode and insert the current header into the
772reply buffer.@refill
773
774@item @code{sc-eref-abort} (@kbd{q}, @kbd{x})
775@findex sc-eref-abort
776@findex eref-abort (sc-)
777@kindex x
778Exit from electric reference mode without inserting the current header.
779@end table
780
781@vindex sc-electric-mode-hook
782@vindex electric-mode-hook (sc-)
783@noindent
784Supercite will execute the hook @code{sc-electric-mode-hook} before
785entering electric reference mode.
786
787@node Getting Connected, Emacs 19 MUAs, Recognizing Citations, Top
788@comment node-name, next, previous, up
789@cindex citation interface specification
790@chapter Getting Connected
791@ifinfo
792
793@end ifinfo
794Hitting @kbd{C-c C-y} in your MUA's reply buffer yanks and cites the
795original message into the reply buffer. In reality, the citation of the
796original message is performed via a call through a configurable hook
797variable. The name of this variable has been agreed to in advance as
798part of the @dfn{citation interface specification}. By default this
799hook variable has a @code{nil} value, which the MUA recognizes to mean,
800``use your default citation function''. When you add Supercite's
801citation function to the hook, thereby giving the variable a
802non-@code{nil} value, it tells the MUA to run the hook via
803@code{run-hooks} instead of using the default citation.@refill
804
805@ifinfo
806@menu
807* Emacs 19 MUAs::
808* Emacs 18 MUAs::
809* MH-E with any Emacsen::
810* VM with any Emacsen::
811* GNEWS with any Emacsen::
812* Overloading for Non-conforming MUAs::
813@end menu
814@end ifinfo
815
816Early in Supercite's development, the Supercite author, a few MUA
817authors, and some early Supercite users got together and agreed upon a
818standard interface between MUAs and citation packages (of which
819Supercite is currently the only known add-on @t{:-)}. With the recent
820release of the Free Software Foundation's GNU Emacs 19, the interface
821has undergone some modification and it is possible that not all MUAs
822support the new interface yet. Some support only the old interface and
823some do not support the interface at all. Still, it is possible for all
824known MUAs to use Supercite, and the following sections will outline the
825procedures you need to follow.
826
827To learn exactly how to connect Supercite to the software systems you
828are using, read the appropriate following sections. For details on the
829interface specifications, or if you are writing or maintaining an MUA,
830@pxref{Hints to MUA Authors}.
831
832@cindex autoload
833@cindex .emacs file
834@findex sc-cite-original
835@findex cite-original (sc-)
836@findex sc-submit-bug-report
837@findex submit-bug-report (sc-)
838The first thing that everyone should do, regardless of the MUA you are
839using is to set up Emacs so it will load Supercite at the appropriate
840time. You can either dump Supercite into your Emacs binary (ask your
841local Emacs guru how to do this if you don't know), or you can set up an
842@dfn{autoload} for Supercite. To do the latter, put the following in
843your @file{.emacs} file:
844
845@example
846(autoload 'sc-cite-original "supercite" "Supercite 3.1" t)
847(autoload 'sc-submit-bug-report "supercite" "Supercite 3.1" t)
848@end example
849
850@cindex point
851@cindex mark
852The function @code{sc-cite-original} is the top-level Supercite function
853designed to be run from the citation hook. It expects
854@samp{point} and @samp{mark} to be set around the region to cite, and it
855expects the original article's mail headers to be present within this
856region. Note that Supercite @emph{never} touches any text outside this
857region. Note further that for Emacs 19, the region need not be active
858for @code{sc-cite-original} to do its job.
859@xref{Hints to MUA Authors}.@refill
860
861The other step in the getting connected process is to make sure your
862MUA calls @code{sc-cite-original} at the right time. As mentioned
863above, some MUAs handle this differently. Read the sections that follow
864pertaining to the MUAs you are using.
865
866@vindex sc-load-hook
867@vindex load-hook (sc-)
868@vindex sc-pre-hook
869@vindex pre-hook (sc-)
870One final note. After Supercite is loaded into your Emacs session, it
871runs the hook @code{sc-load-hook}. You can put any customizations into
872this hook since it is only run once. This will not work, however, if
873your Emacs maintainer has put Supercite into your dumped Emacs' image.
874In that case, you can use the @code{sc-pre-hook} variable, but this will
875get executed every time @code{sc-cite-original} is called. @xref{Reply
876Buffer Initialization}.@refill
877
878@node Emacs 19 MUAs, Emacs 18 MUAs, Getting Connected, Getting Connected
879@comment node-name, next, previous, up
880@vindex mail-citation-hook
881@cindex .emacs file
882@section GNUS, RMAIL, or RNEWS with any Emacs 19
883@ifinfo
884
885@end ifinfo
886These MUAs, distributed with Emacs and with Lucid Emacs, use Emacs's
887built-in yanking facility, which provides the citing hook variable
888@code{mail-citation-hook}. By default, this hook's value is @code{nil},
889but by adding the following to your @file{.emacs} file, you can tell
890these MUAs to use Supercite to perform the citing of the original
891message:
892
893@example
894(add-hook 'mail-citation-hook 'sc-cite-original)
895@end example
896
897GNUS users may also want to add the following bit of lisp as well. This
898prevents GNUS from inserting its default attribution header. Otherwise,
899both GNUS and Supercite will insert an attribution header:
900
901@example
902(setq news-reply-header-hook nil)
903@end example
904
905@node Emacs 18 MUAs, MH-E with any Emacsen, Emacs 19 MUAs, Getting Connected
906@comment node-name, next, previous, up
907@vindex mail-citation-hook
908@cindex .emacs file
909@cindex overloading
910@cindex sendmail.el file
911@section GNUS, RMAIL, PCMAIL, RNEWS with Emacs 18 or Epoch 4
912@ifinfo
913
914@end ifinfo
915These MUAs use Emacs' built-in yanking and citing routines, contained in
916the @file{sendmail.el} file. @file{sendmail.el} for Emacs 18, and its
917derivative Epoch 4, do not know anything about the citation interface
918required by Supercite. To connect Supercite to any of these MUAs under
919Emacs 18 or Epoch 4, you should first
920@pxref{Overloading for Non-conforming MUAs}. Then follow the directions
921for using these MUAs under Emacs 19.
922@xref{Emacs 19 MUAs}.@refill
923
924@cindex add-hook substitute
925@cindex setq as a substitute for add-hook
926@findex setq
927@findex add-hook
928@cindex sc-unsupp.el file
929Note that those instructions will tell you to use the function
930@code{add-hook}. This function is new with Emacs 19 and you will not
931have it by default if you are running Emacs 18 or Epoch 4. You can
932either substitute the appropriate call to @code{setq}, or you can use
933the @code{add-hook} function that is provided in the @file{sc-unsupp.el}
934file of unsupported Supercite hacks and ideas. Or you can upgrade to
935some Emacs 19 variant! @t{:-)}@refill
936
937To use @code{setq} instead of @code{add-hook}, you would, for example,
938change this:
939
940@example
941(add-hook 'mail-citation-hook 'sc-cite-original)
942@end example
943
944to:
945
946@example
947(setq mail-citation-hook 'sc-cite-original)
948@end example
949
950Note the lack of of a single quote on the first argument to @code{setq}.
951
952@node MH-E with any Emacsen, VM with any Emacsen, Emacs 18 MUAs, Getting Connected
953@comment node-name, next, previous, up
954@cindex .emacs file
955@vindex mh-yank-hooks
956@findex add-hook
957@cindex mail-citation-hook
958@section MH-E with any Emacsen
959@ifinfo
960
961@end ifinfo
962MH-E 4.x conforms to the @code{mail-citation-hook} interface supported
963by other MUAs. At the time of this writing, MH-E 4.0 has not been
964released, but if you have it, put this in your @file{.emacs} file to
965connect Supercite and MH-E 4.x:
966
967@example
968(add-hook 'mail-citation-hook 'sc-cite-original)
969@end example
970
971Note that if you are using Emacs 18 or Epoch 4, you will not have the
972@code{add-hook} function. @xref{Emacs 18 MUAs}, for details on how to
973proceed without @code{add-hook}.
974
975MH-E version 3.x uses a slightly different interface than other MUAs.
976MH-E provides a hook variable @code{mh-yank-hooks}, but it doesn't act
977like a hook, and doing an @code{add-hook} will not work.
978
979To connect Supercite to MH-E 3.x, you should instead add the following
980to your @code{.emacs} file:
981
982@example
983(add-hook 'mh-yank-hooks 'sc-cite-original)
984@end example
985
986@vindex mh-yank-from-start-of-msg
987You also need to make sure that MH-E includes all the original mail
988headers in the yanked message. The variable that controls this is
989@code{mh-yank-from-start-of-msg}. By default, this variable has the
990value @code{t}, which tells MH-E to include all the mail headers when
991yanking the original message. Before you switched to using Supercite,
992you may have set this variable to other values so as not to include the
993mail headers in the yanked message. Since Supercite requires these
994headers (and cleans them out for you), you need to make sure the value
995is @code{t}. This lisp, in your @file{.emacs} file will do the trick:
996
997@example
998(setq mh-yank-from-start-of-msg t)
999@end example
1000
1001Note that versions of MH-E before 3.7 did not provide the
1002@code{mh-yank-hooks} variable. Your only option is to upgrade to MH-E
1003version 3.7 or later.
1004
1005@node VM with any Emacsen, GNEWS with any Emacsen, MH-E with any Emacsen, Getting Connected
1006@comment node-name, next, previous, up
1007@cindex .emacs file
1008@vindex mail-citation-hook
1009@vindex mail-yank-hooks
1010@section VM with any Emacsen
1011@ifinfo
1012
1013@end ifinfo
1014Since release 4.40, VM has supported the citation interface required by
1015Supercite. But since the interface has changed recently the details of
1016getting connected differ with the version of VM you are using.
1017
1018If you are running any release of VM after 4.40, you can add the
1019following to your @file{.emacs} to connect Supercite with VM:
1020
1021@example
1022(add-hook 'mail-yank-hooks 'sc-cite-original)
1023@end example
1024
1025Note that if you are using Emacs 18 or Epoch 4, you will not have the
1026@code{add-hook} function. @xref{Emacs 18 MUAs}, for details on how to
1027proceed without @code{add-hook}.
1028
1029Since version 5.34, VM has supported the newer @code{mail-citation-hook}
1030interface, but @code{mail-yank-hooks} is still being supported for
1031backward compatibility. If you are running a newer version of VM and
1032you want to maintain consistency with other MUAs, use this bit of code
1033instead:
1034
1035@example
1036(add-hook 'mail-citation-hook 'sc-cite-original)
1037@end example
1038
1039@node GNEWS with any Emacsen, Overloading for Non-conforming MUAs, VM with any Emacsen, Getting Connected
1040@comment node-name, next, previous, up@cindex .emacs file
1041@vindex news-reply-mode-hook
1042@findex sc-perform-overloads
1043@findex perform-overloads (sc-)
1044@vindex gnews-ready-hook
1045@section GNEWS with any Emacsen
1046@ifinfo
1047
1048@end ifinfo
1049As far as I know, no version of GNEWS supports the citation interface
1050required by Supercite. To connect Supercite with GNEWS, please first
1051@pxref{Overloading for Non-conforming MUAs}.
1052
1053After you have followed the directions in that section. You should add
1054the following lisp code to your @file{.emacs} file:
1055
1056@example
1057(add-hook 'mail-citation-hook 'sc-cite-original)
1058@end example
1059
1060Note that if you are using Emacs 18 or Epoch 4, you will not have the
1061@code{add-hook} function. @xref{Emacs 18 MUAs}, for details on how to
1062proceed without @code{add-hook}.
1063
1064@node Overloading for Non-conforming MUAs, Replying and Yanking, GNEWS with any Emacsen, Getting Connected
1065@comment node-name, next, previous, up
1066@cindex overloading
1067@cindex sc-oloads.el
1068@vindex mail-citation-hook
1069@findex sc-perform-overloads
1070@cindex .emacs file
1071@section Overloading for Non-conforming MUAs
1072@ifinfo
1073
1074@end ifinfo
1075As mentioned elsewhere, some MUAs do not provide the necessary hooks to
1076connect with Supercite. Supercite version 3.1 provides an unsupported
1077mechanism, called @dfn{overloading} which redefines certain key
1078functions in the MUA, so that it will call the @code{mail-citation-hook}
1079variable instead of the MUA's default hard-coded citing routines. Since
1080most newer versions of the known MUAs support the
1081@code{mail-citation-hook} variable, it is recommended that you upgrade
1082if at all possible. But if you can't upgrade, at least you're not out
1083of luck! Once you set up overloading properly, you should follow the
1084directions for connecting Supercite to the Emacs 19 MUAs.
1085@xref{Emacs 19 MUAs}.@refill
1086
1087@cindex Hyperbole
1088@vindex hyperb:version
1089Users of Bob Weiner's Hyperbole package take note. Hyperbole provides
1090the necessary overloads (and a whole lot more!) and you can potentially
1091clobber it if you were to load Supercite's overloading after
1092Hyperbole's. For this reason, Supercite will @emph{not} perform any
1093overloading if it finds the variable @code{hyperb:version} is
1094@code{boundp} (i.e. it exists because Hyperbole has been loaded into
1095your Emacs session). If this is the case, Supercite will display a
1096warning message in the minibuffer. You should consult the Hyperbole
1097manual for further details.
1098
1099Overloading involves the re-definition of the citing function with the
1100new, @code{mail-citation-hook} savvy version. The function in
1101@file{sc-oloads.el} that does this is @code{sc-perform-overloads}. This
1102function is smart enough to only overload the MUA functions when it is
1103absolutely necessary, based on the version numbers it can figure out.
1104Also, @code{sc-perform-overloads} will only install the new functions
1105once. It is also smart enough to do nothing if the MUA is not yet
1106loaded.@refill
1107
1108The tricky part is finding the right time and place to perform the
1109overloading. It must be done after the MUA has been loaded into your
1110Emacs session, but before the first time you try to yank in a message.
1111Fortunately, this has been figured out for you.
1112
1113If you must overload, you should put the following lisp code in your
1114@file{.emacs} file, to make sure the @file{sc-oloads.el} file gets
1115loaded at the right time:
1116
1117@example
1118(autoload 'sc-perform-overloads "sc-oloads" "Supercite 3.1" t)
1119@end example
1120
1121Then you must make sure that the function @code{sc-perform-overloads}
1122gets run at the right time. For GNUS, put this in your @file{.emacs}
1123file:
1124
1125@example
1126(setq news-reply-mode-hook 'sc-perform-overloads)
1127(setq mail-setup-hook 'sc-perform-overloads)
1128@end example
1129
1130If you are using RNEWS, put this in your @file{.emacs} file:
1131
1132@vindex news-reply-mode-hook
1133@example
1134(setq news-reply-mode-hook 'sc-perform-overloads)
1135@end example
1136
1137If you are using RMAIL or PCMAIL, put this in your @file{.emacs} file:
1138
1139@example
1140(setq mail-setup-hook 'sc-perform-overloads)
1141@end example
1142
1143If you are using GNEWS, put this in your @file{.emacs} file:
1144
1145@example
1146(setq news-reply-mode-hook 'sc-perform-overloads)
1147(setq gnews-ready-hook 'sc-perform-overloads)
1148@end example
1149
1150Now go back and follow the directions for getting the Emacs 19 MUAs
1151connected to Supercite. Be sure to @pxref{Emacs 18 MUAs} on substitutes
1152for Emacs 19's @code{add-hook} function.@refill
1153
1154@node Replying and Yanking, Reply Buffer Initialization, Overloading for Non-conforming MUAs, Top
1155@comment node-name, next, previous, up
1156@chapter Replying and Yanking
1157@ifinfo
1158
1159This chapter explains what happens when you reply and yank an original
1160message from an MUA.
1161
1162@menu
1163* Reply Buffer Initialization::
1164* Filling Cited Text::
1165@end menu
1166@end ifinfo
1167@node Reply Buffer Initialization, Filling Cited Text, Replying and Yanking, Replying and Yanking
1168@comment node-name, next, previous, up
1169@findex sc-cite-original
1170@findex cite-original (sc-)
1171@comment
1172@section Reply Buffer Initialization
1173@ifinfo
1174
1175@end ifinfo
1176Executing @code{sc-cite-original} performs the following steps as it
1177initializes the reply buffer:
1178
1179@enumerate
1180@item
1181@vindex sc-pre-hook
1182@vindex pre-hook (sc-)
1183@emph{Runs @code{sc-pre-hook}.}
1184This hook variable is run before @code{sc-cite-original} does any other
1185work. You could conceivably use this hook to set certain Supercite
1186variables based on the reply buffer's mode or name (i.e., to do
1187something different based on whether you are replying or following up to
1188an article).@refill
1189
1190@item
1191@emph{Inserts Supercite's keymap.}
1192@vindex sc-mode-map-prefix
1193@vindex mode-map-prefix (sc-)
1194@kindex C-c C-p
1195@cindex keymap prefix
1196Supercite provides a number of commands for performing post-yank
1197modifications to the reply buffer. These commands are installed on
1198Supercite's top-level keymap. Since Supercite has to interface with a
1199wide variety of MUAs, it does not install all of its commands directly
1200into the reply buffer's keymap. Instead, it puts its commands on a
1201keymap prefix, then installs this prefix onto the buffer's keymap. What
1202this means is that you typically have to type more characters to invoke
1203a Supercite command, but Supercite's keybindings can be made much more
1204consistent across MUAs.
1205
1206You can control what key Supercite uses as its keymap prefix by changing
1207the variable @code{sc-mode-map-prefix}. By default, this variable is
1208set to @code{C-c C-p}; a finger twister perhaps, but unfortunately the
1209best default due to the scarcity of available keybindings in many MUAs.
1210
1211@item
1212@emph{Turns on Supercite minor mode.}
1213@cindex modeline
1214The modeline of the reply buffer should indicate that Supercite is
1215active in that buffer by displaying the string @samp{SC}.
1216
1217@item
1218@emph{Sets the ``Undo Boundary''.}
1219@cindex undo boundary
1220Supercite sets an undo boundary before it begins to modify the original
1221yanked text. This allows you to easily undo Supercite's changes to
1222affect alternative citing styles.
1223
1224@item
1225@emph{Processes the mail headers.}
1226@vindex sc-confirm-always-p
1227@vindex confirm-always-p (sc-)
1228@vindex sc-mail-warn-if-non-rfc822-p
1229@vindex mail-warn-if-non-rfc822-p (sc-)
1230All previously retrieved info key-value pairs are deleted from the info
1231alist, then the mail headers in the body of the yanked message are
1232scanned. Info key-value pairs are created for each header found. Also,
1233such useful information as the author's name and email address are
1234extracted. If the variable @code{sc-mail-warn-if-non-rfc822-p} is
1235non-@code{nil}, then Supercite will warn you if it finds a mail header
1236that does not conform to RFC822. This is rare and indicates a problem
1237either with your MUA or the original author's MUA, or some MTA (mail
1238transport agent) along the way.
1239
1240@vindex sc-nuke-mail-headers
1241@vindex sc-nuke-mail-header-list
1242@vindex nuke-mail-headers (sc-)
1243@vindex nuke-mail-header-list (sc-)
1244Once the info keys have been extracted from the mail headers, the
1245headers are nuked from the reply buffer. You can control exactly which
1246headers are removed or kept, but by default, all headers are removed.
1247
1248There are two variables which control mail header nuking. The variable
1249@code{sc-nuke-mail-headers} controls the overall behavior of the header
1250nuking routines. By setting this variable to @code{'all}, you
1251automatically nuke all mail headers. Likewise, setting this variable to
1252@code{'none} inhibits nuking of any mail headers. In between these
1253extremes, you can tell Supercite to nuke only a specified list of mail
1254headers by setting this variable to @code{'specified}, or to keep only a
1255specified list of headers by setting it to @code{'keep}.
1256
1257If @code{sc-nuke-mail-headers} is set to @code{'specified} or
1258@code{'keep}, then the variable @code{sc-nuke-mail-header-list} is
1259consulted for the list of headers to nuke or keep. This variable
1260contains a list of regular expressions. If the mail header line matches
1261a regular expression in this list, the header will be nuked or kept.
1262The line is matched against the regexp using @code{looking-at} rooted at
1263the beginning of the line.
1264
1265@vindex sc-blank-lines-after-headers
1266@vindex blank-lines-after-headers (sc-)
1267If the variable @code{sc-blank-lines-after-headers} is non-@code{nil},
1268it contains the number of blank lines remaining in the buffer after mail
1269headers are nuked. By default, only one blank line is left in the buffer.
1270
1271@item
1272@emph{Selects the attribution and citation strings.}
1273Once the mail headers have been processed, Supercite selects a
1274attribution string and a citation string which it will use to cite the
1275original message. @xref{Selecting an Attribution}, for details.
1276
1277@item
1278@emph{Cites the message body.}
1279@vindex sc-cite-region-limit
1280@vindex cite-region-limit (sc-)b
1281After the selection of the attribution and citation strings, Supercite
1282cites the original message by inserting the citation string prefix in
1283front of every uncited line. You may not want Supercite to
1284automatically cite very long messages however. For example, some email
1285could contain a smaller header section followed by a huge uuencoded
1286message. It wouldn't make sense to cite the uuencoded message part when
1287responding to the original author's short preface. For this reason,
1288Supercite provides a variable which limits the automatic citation of
1289long messages to a certain maximum number of lines. The variable is
1290called @code{sc-cite-region-limit}. If this variable contains an
1291integer, messages with more lines that this will not be cited at all,
1292and a warning message will be displayed. Supercite has performed
1293everything necessary, though, for you to manually cite only the small
1294portion of the original message that you want to use.
1295
1296If @code{sc-cite-region-limit} contains a non-@code{nil} value, the
1297original message will always be cited, regardless of its size. If the
1298variable contains the value @code{nil}, the region will never be cited
1299automatically. Use this if you always want to be able to edit and cite
1300the message manually.
1301
1302@vindex sc-cite-blank-lines-p
1303@vindex cite-blank-lines-p (sc-)
1304The variable @code{sc-cite-blank-lines-p} controls whether blank lines
1305in the original message should be cited or not. If this variable is
1306non-@code{nil}, blank lines will be cited just like non-blank lines.
1307Otherwise, blank lines will be treated as paragraph separators.
1308
1309Citing of the original message is highly configurable. Supercite's
1310default setup does a pretty good job of citing many common forms of
1311previously cited messages. But there are as many citation styles out
1312there as people on the net, or just about! It would be impossible for
1313Supercite to anticipate every style in existence, and you probably
1314wouldn't encounter them all anyway. But you can configure Supercite to
1315recognize those styles you see often.
1316@xref{Configuring the Citation Engine}, for details.@refill
1317
1318@item
1319@emph{Runs @code{sc-post-hook}.}
1320@vindex sc-post-hook
1321@vindex post-hook (sc-)
1322This variable is very similar to @code{sc-pre-hook}, except that it runs
1323after @code{sc-cite-original} is finished. This hook is provided mostly
1324for completeness and backward compatibility. Perhaps it could be used to
1325reset certain variables set in @code{sc-pre-hook}.@refill
1326@end enumerate
1327
1328@node Filling Cited Text, Selecting an Attribution, Reply Buffer Initialization, Replying and Yanking
1329@comment node-name, next, previous, up
1330@cindex filling paragraphs
1331@vindex sc-auto-fill-region-p
1332@vindex auto-fill-region-p (sc-)
1333@cindex filladapt
1334@cindex gin-mode
1335@findex sc-setup-filladapt
1336@findex setup-filladapt (sc-)
1337@vindex sc-load-hook
1338@vindex load-hook (sc-)
1339@section Filling Cited Text
1340@ifinfo
1341
1342@end ifinfo
1343Supercite will automatically fill newly cited text from the original
1344message unless the variable @code{sc-auto-fill-region-p} has a
1345@code{nil} value. Supercite will also re-fill paragraphs when you
1346manually cite or re-cite text.
1347
1348However, during normal editing, Supercite itself cannot be used to fill
1349paragraphs. This is a change from version 2. There are other add-on
1350lisp packages which do filling much better than Supercite ever did. The
1351two best known are @dfn{filladapt} and @dfn{gin-mode}. Both work well
1352with Supercite and both are available at the normal Emacs Lisp archive
1353sites. @dfn{gin-mode} works pretty well out of the box, but if you use
1354@dfn{filladapt}, you may want to run the function
1355@code{sc-setup-filladapt} from your @code{sc-load-hook}. This simply
1356makes @dfn{filladapt} a little more Supercite savvy than its default
1357setup.
1358
1359@vindex sc-fixup-whitespace-p
1360@vindex fixup-whitespace-p (sc-)
1361Also, Supercite will collapse leading whitespace between the citation
1362string and the text on a line when the variable
1363@code{sc-fixup-whitespace-p} is non-@code{nil}. The default value for
1364this variable is @code{nil}.@refill
1365
1366@vindex fill-prefix
1367Its important to understand that Supercite's automatic filling (during
1368the initial citation of the reply) is very fragile. That is because
1369figuring out the @code{fill-prefix} for a particular paragraph is a
1370really hard thing to do automatically. This is especially the case when
1371the original message contains code or some other text where leading
1372whitespace is important to preserve. For this reason, many Supercite
1373users typically run with @code{sc-auto-fill-region-p} (and possibly also
1374@code{sc-fixup-whitespace-p}) set to @code{nil}. They then manually
1375fill each cited paragraph in the reply buffer.
1376
1377I usually run with both these variables containing their default values.
1378When Supercite's automatic filling breaks on a particular message, I
1379will use Emacs' undo feature to undo back before the citation was
1380applied to the original message. Then I'll toggle the variables and
1381manually cite those paragraphs that I don't want to fill or collapse
1382whitespace on. @xref{Variable Toggling Shortcuts}.@refill
1383
1384@kindex C-c C-p C-p
1385If you find that Supercite's automatic filling is just too fragile for
1386your tastes, you might consider one of these alternate approaches.
1387Also, to make life easier, a shortcut function to toggle the state of
1388both of these variables is provided on the key binding
1389@kbd{C-c C-p C-p} (with the default value of @code{sc-mode-map-prefix};
1390@pxref{Post-yank Formatting Commands}).@refill
1391
1392You will noticed that the minor mode string will
1393show the state of these variables as qualifier characters. When both
1394variables are @code{nil}, the Supercite minor mode string will display
1395@samp{SC}. When just @code{sc-auto-fill-region-p} is non-@code{nil}, the
1396string will display @samp{SC:f}, and when just
1397@code{sc-fixup-whitespace-p} is non-@code{nil}, the string will display
1398@samp{SC:w}. When both variables are non-@code{nil}, the string will
1399display @samp{SC:fw}. Note that the qualifiers chosen are mnemonics for
1400the default bindings of the toggling function for each respective
1401variable.
1402@xref{Variable Toggling Shortcuts}.@refill
1403
1404Why are these variables not set to @code{nil} by default? It is because
1405many users won't manually fill paragraphs that are Supercited, and there
1406have been widespread complaints on the net about mail and news messages
1407containing lines greater than about 72 characters. So the default is to
1408fill cited text.
1409
1410@node Selecting an Attribution, Attribution Preferences, Filling Cited Text, Top
1411@comment node-name, next, previous, up
1412@cindex attribution list
1413@vindex sc-preferred-attribution-list
1414@vindex preferred-attribution-list (sc-)
1415@comment
1416@chapter Selecting an Attribution
1417@ifinfo
1418
1419@end ifinfo
1420As you know, the attribution string is the part of the author's name
1421that will be used to composed a non-nested citation string. Supercite
1422scans the various mail headers present in the original article and uses
1423a number of heuristics to extract strings which it puts into the
1424@dfn{attribution association list} or @dfn{attribution alist}. This is
1425analogous, but different than, the info alist previously mentioned. Each
1426element in the attribution alist is a key-value pair containing such
1427information as the author's first name, middle names, and last name, the
1428author's initials, and the author's email terminus.
1429
1430@ifinfo
1431@menu
1432* Attribution Preferences::
1433* Anonymous Attributions::
1434* Author Names::
1435@end menu
1436@end ifinfo
1437
1438@node Attribution Preferences, Anonymous Attributions, Selecting an Attribution, Selecting an Attribution
1439@comment node-name, next, previous, up
1440@section Attribution Preferences
1441@ifinfo
1442
1443@end ifinfo
1444When you cite an original message, you can tell Supercite which part of
1445the author's name you would prefer it to use as the attribution. The
1446variable @code{sc-preferred-attribution-list} controls this; it contains
1447keys which are matched against the attribution alist in the given order.
1448The first value of a key that produces a non-@code{nil}, non-empty
1449string match is used as the attribution string, and if no keys match, a
1450secondary mechanism is used to generate the attribution.
1451@xref{Anonymous Attributions}.
1452
1453The following preferences are always available in the attribution alist
1454(barring error):
1455
1456@table @code
1457@item "emailname"
1458the author's email terminus.
1459
1460@item "initials"
1461the author's initials.
1462
1463@item "firstname"
1464the author's first name.
1465
1466@item "lastname"
1467the author's last name.
1468
1469@item "middlename-1"
1470the author's first middle name.
1471
1472@item "sc-lastchoice"
1473the last attribution string you have selected. This is useful when you
1474recite paragraphs in the reply.@refill
1475
1476@item "sc-consult"
1477@vindex sc-attrib-selection-list
1478@vindex attrib-selection-list (sc-)
1479consults the customizable list @code{sc-attrib-selection-list} which can
1480be used to select special attributions based on the value of any info
1481key. See below for details.
1482
1483@item "x-attribution"
1484the original author's suggestion for attribution string choice. See below
1485for details.@refill
1486@end table
1487
1488Middle name indexes can be any positive integer greater than zero,
1489though it is unlikely that many authors will have more than one middle
1490name, if that many.
1491
1492At this point, let me digress into a discussion of etiquette. It is my
1493belief that while the style of the citations is a reflection of the
1494personal tastes of the replier (i.e., you), the attribution selection is
1495ultimately the personal choice of the original author. In a sense it is
1496his or her ``net nickname'', and therefore the author should have some
1497say in the selection of attribution string. Imagine how you would feel
1498if someone gave you a nickname that you didn't like?
1499
1500For this reason, Supercite recognizes a special mail header,
1501@samp{X-Attribution:}, which if present, tells Supercite the attribution
1502string preferred by the original author. It is the value of this header
1503that is associated with the @code{"x-attribution"} key in the
1504attribution alist. Currently, you can override the preference of this
1505key by changing @code{sc-preferred-attribution-list}, but that isn't
1506polite, and in the future Supercite may hard-code this. For now, it is
1507suggested that if you change the order of the keys in this list, that
1508@code{"x-attribution"} always be first, or possible second behind only
1509@code{"sc-lastchoice"}. This latter is the default.
1510
1511@vindex sc-attrib-selection-list
1512@vindex attrib-selection-list (sc-)
1513The value @code{"sc-consult"} in @code{sc-preferred-attribution-list}
1514has a special meaning during attribution selection. When Supercite
1515encounters this preference, it begins processing a customizable list of
1516attributions, contained in the variable @code{sc-attrib-selection-list}.
1517Each element in this list contains lists of the following form:
1518
1519@example
1520@group
1521(@var{infokey} ((@var{regexp} @. @var{attribution})
1522 (@var{regexp} @. @var{attribution})
1523 (@dots{})))
1524@end group
1525@end example
1526
1527@noindent
1528@findex sc-mail-field
1529@findex mail-field (sc-)
1530where @var{infokey} is a key for @code{sc-mail-field} and @var{regexp}
1531is a regular expression to match against the @var{infokey}'s value. If
1532@var{regexp} matches the @var{infokey}'s value, the @var{attribution} is
1533used as the attribution string. Actually, @var{attribution} can be a
1534string or a list; if it is a list, it is @code{eval}uated and the return
1535value (which must be a string), is used as the attribution.
1536
1537This can be very useful for when you are replying to net acquaintances
1538who do not use the @samp{X-Attribution:@:} mail header. You may know
1539what nickname they would prefer to use, and you can set up this list to
1540match against a specific mail field, e.g., @samp{From:@:}, allowing you
1541to cite your friend's message with the appropriate attribution.
1542
1543@node Anonymous Attributions, Author Names, Attribution Preferences, Selecting an Attribution
1544@comment node-name, next, previous, up
1545@vindex sc-default-author-name
1546@vindex default-author-name (sc-)
1547@vindex sc-default-attribution
1548@vindex default-attribution (sc-)
1549@comment
1550@section Anonymous Attributions
1551@ifinfo
1552
1553@end ifinfo
1554When the author's name cannot be found in the @samp{From:@:} mail
1555header, a fallback author name and attribution string must be supplied.
1556The fallback author name is contained in the variable
1557@code{sc-default-author-name} and the fallback attribution string is
1558contained in the variable @code{sc-default-attribution}. Default values
1559for these variables are @code{"Anonymous"} and @code{"Anon"},
1560respectively. Note that in most circumstances, getting the default
1561author name or attribution is a sign that something is set up
1562incorrectly.
1563
1564@vindex sc-use-only-preference-p
1565@vindex use-only-preference-p (sc-)
1566Also, if the preferred attribution, which you specified in your
1567@code{sc-preferred-attribution-alist} variable cannot be found, a
1568secondary method can be employed to find a valid attribution string. The
1569variable @code{sc-use-only-preference-p} controls what happens in this
1570case. If the variable's value is non-@code{nil}, then
1571@code{sc-default-author-name} and @code{sc-default-attribution} are
1572used, otherwise, the following steps are taken to find a valid
1573attribution string, and the first step to return a non-@code{nil},
1574non-empty string becomes the attribution:@refill
1575
1576@enumerate
1577@item
1578Use the last selected attribution, if there is one.
1579
1580@item
1581Use the value of the @code{"x-attribution"} key.
1582
1583@item
1584Use the author's first name.
1585
1586@item
1587Use the author's last name.
1588
1589@item
1590Use the author's initials.
1591
1592@item
1593Find the first non-@code{nil}, non-empty attribution string in the
1594attribution alist.
1595
1596@item
1597@code{sc-default-attribution} is used.
1598@end enumerate
1599
1600@vindex sc-confirm-always-p
1601@vindex confirm-always-p (sc-)
1602Once the attribution string has been automatically selected, a number of
1603things can happen. If the variable @code{sc-confirm-always-p} is
1604non-@code{nil}, you are queried for confirmation of the chosen
1605attribution string. The possible values for completion are those strings
1606in the attribution alist, however you are not limited to these choices.
1607You can type any arbitrary string at the confirmation prompt. The string
1608you enter becomes the value associated with the @code{"sc-lastchoice"}
1609key in the attribution alist.
1610
1611@vindex sc-downcase-p
1612@vindex downcase-p (sc-)
1613Once an attribution string has been selected, Supercite will force the
1614string to lower case if the variable @code{sc-downcase-p} is
1615non-@code{nil}.
1616
1617@vindex sc-attribs-preselect-hook
1618@vindex attribs-preselect-hook (sc-)
1619@vindex sc-attribs-postselect-hook
1620@vindex attribs-postselect-hook (sc-)
1621
1622Two hook variables provide even greater control of the attribution
1623selection process. The hook @code{sc-attribs-preselect-hook} is run
1624before any attribution is selected. Likewise, the hook
1625@code{sc-attribs-postselect-hook} is run after the attribution is
1626selected (and the corresponding citation string is built), but before
1627these values are committed for use by Supercite. During the
1628post-selection hook, the local variables @code{attribution} and
1629@code{citation} are bound to the appropriate strings. By changing these
1630variables in your hook functions, you change the attribution and
1631citation strings used by Supercite. One possible use of this would be
1632to override any automatically derived attribution string when it is only
1633one character long; e.g. you prefer to use @code{"initials"} but the
1634author only has one name.@refill
1635
1636@node Author Names, Configuring the Citation Engine, Anonymous Attributions, Selecting an Attribution
1637@comment node-name, next, previous, up
1638@cindex author names
1639@section Author Names
1640@ifinfo
1641
1642@end ifinfo
1643Supercite employs a number of heuristics to decipher the author's name
1644based on value of the @samp{From:@:} mail field of the original message.
1645Supercite can recognize almost all of the common @samp{From:@:} field
1646formats in use. If you encounter a @samp{From:@:} field that Supercite
1647cannot parse, please report this bug.
1648@xref{The Supercite Mailing List}.@refill
1649
1650@vindex sc-titlecue-regexp
1651@vindex titlecue-regexp (sc-)
1652There are a number of Supercite variables that control how author names
1653are extracted from the @samp{From:@:} header. Some headers may contain a
1654descriptive title as in:
1655
1656@example
1657From:@: computer!speedy!doe (John Xavier-Doe -- Decent Hacker)
1658@end example
1659
1660Supercite knows which part of the @samp{From:@:} header is email address
1661and which part is author name, but in this case the string @code{"Decent
1662Hacker"} is not part of the author's name. You can tell Supercite to
1663ignore the title, while still recognizing hyphenated names through the
1664use of a regular expression in the variable @code{sc-titlecue-regexp}.
1665This variable has the default value of @code{"\\\\s +-+\\\\s +"}. Any
1666text after this regexp is encountered is ignored as noise.
1667
1668@vindex sc-name-filter-alist
1669@vindex name-filter-alist (sc-)
1670Some @samp{From:@:} headers may contain extra titles in the name fields
1671not separated by a title cue, but which are nonetheless not part of the
1672author's name proper. Examples include the titles ``Dr.'', ``Mr.'',
1673``Ms.'', ``Jr.'', ``Sr.'', and ``III'' (e.g., Thurston Howe, the Third).
1674Also, some companies prepend or append the name of the division,
1675organization, or project on the author's name. All of these titles are
1676noise which should be ignored. The variable @code{sc-name-filter-alist}
1677is used for this purpose. As implied by its name, this variable is an
1678association list, where each element is a cons cell of the form:
1679
1680@example
1681(@var{regexp} @. @var{position})
1682@end example
1683
1684@noindent
1685where @var{regexp} is a regular expression that is matched (using
1686@code{string-match}) against each element of the @samp{From:@:} field's
1687author name. @var{position} is a position indicator, starting at zero.
1688Thus to strip out all titles of ``Dr.'', ``Mr.'', etc. from the name,
1689@code{sc-name-filter-alist} would have an entry such as:
1690
1691@example
1692("^\\(Mr\\|Mrs\\|Ms\\|Dr\\)[.]?$" @. 0)
1693@end example
1694
1695@noindent
1696which only removes them if they appear as the first word in the name.
1697The position indicator is an integer, or one of the two special symbols
1698@code{last} or @code{any}. @code{last} always matches against the last
1699word in the name field, while @code{any} matches against every word in
1700the name field.
1701
1702@node Configuring the Citation Engine, Using Regi, Author Names, Top
1703@comment node-name, next, previous, up
1704@cindex Regi
1705@cindex frames (Regi)
1706@cindex entries (Regi)
1707@chapter Configuring the Citation Engine
1708@ifinfo
1709
1710@end ifinfo
1711At the heart of Supercite is a regular expression interpreting engine
1712called @dfn{Regi}. Regi operates by interpreting a data structure
1713called a Regi-frame (or just @dfn{frame}), which is a list of
1714Regi-entries (or just @dfn{entry}). Each entry contains a predicate,
1715typically a regular expression, which is matched against a line of text
1716in the current buffer. If the predicate matches true, an associated
1717expression is @code{eval}uated. In this way, an entire region of text
1718can be transformed in an @emph{awk}-like manner. Regi is used
1719throughout Supercite, from mail header information extraction, to header
1720nuking, to citing text.
1721
1722@ifinfo
1723@menu
1724* Using Regi::
1725* Frames You Can Customize::
1726@end menu
1727@end ifinfo
1728
1729While the details of Regi are discussed below (@pxref{Using Regi}), only
1730those who wish to customize certain aspects of Supercite need concern
1731themselves with it. It is important to understand though, that any
1732conceivable citation style that can be described by a regular expression
1733can be recognized by Supercite. This leads to some interesting
1734applications. For example, if you regularly receive email from a
1735co-worker that uses an uncommon citation style (say one that employs a
1736@samp{|} or @samp{@}} character at the front of the line), it is
1737possible for Supercite to recognize this and @emph{coerce} the citation
1738to your preferred style, for consistency. In theory, it is possible for
1739Supercite to recognize such things as uuencoded messages or C code and
1740cite or fill those differently than normal text. None of this is
1741currently part of Supercite, but contributions are welcome!
1742
1743@node Using Regi, Frames You Can Customize, Configuring the Citation Engine, Configuring the Citation Engine
1744@comment node-name, next, previous, up
1745@findex regi-interpret
1746@findex eval
1747@findex looking-at
1748@section Using Regi
1749@ifinfo
1750
1751@end ifinfo
1752Regi works by interpreting frames with the function
1753@code{regi-interpret}. A frame is a list of arbitrary size where each
1754element is a entry of the following form:
1755
1756@example
1757(@var{pred} @var{func} [@var{negate-p} [@var{case-fold-search}]])
1758@end example
1759
1760Regi starts with the first entry in a frame, evaluating the @var{pred}
1761of that entry against the beginning of the line that @samp{point} is on.
1762If the @var{pred} evaluates to true (or false if the optional
1763@var{negate-p} is non-@code{nil}), then the @var{func} for that entry is
1764@code{eval}uated. How processing continues is determined by the return
1765value for @var{func}, and is described below. If @var{pred} was false
1766the next entry in the frame is checked until all entries have been
1767matched against the current line. If no entry matches, @samp{point} is
1768moved forward one line and the frame is reset to the first entry.
1769
1770@var{pred} can be a string, a variable, a list or one of the following
1771symbols: @code{t}, @code{begin}, @code{end}, or @code{every}. If
1772@var{pred} is a string, or a variable or list that @code{eval}uates to a
1773string, it is interpreted as a regular expression. This regexp is
1774matched against the current line, from the beginning, using
1775@code{looking-at}. This match folds case if the optional
1776@var{case-fold-search} is non-@code{nil}. If @var{pred} is not a
1777string, or does not @code{eval}uate to a string, it is interpreted as a
1778binary value (@code{nil} or non-@code{nil}).@refill
1779
1780The four special symbol values for @var{pred} are recognized:
1781
1782@table @code
1783@item t
1784Always produces a true outcome.
1785@item begin
1786Always executed before the frame is interpreted. This can be used to
1787initialize some global variables for example.
1788@item end
1789Always executed after frame interpreting is completed. This can be used
1790to perform any necessary post-processing.
1791@item every
1792Executes whenever the frame is reset, usually after the entire frame has
1793been matched against the current line.
1794@end table
1795
1796Note that @var{negate-p} and @var{case-fold-search} are ignored if
1797@var{pred} is one of these special symbols. Only the first occurrence of
1798each symbol in a frame is used; any duplicates are ignored. Also
1799note that for performance reasons, the entries associated with these
1800symbols are removed from the frame during the main interpreting loop.
1801
1802Your @var{func} can return certain values which control continued Regi
1803processing. By default, if your @var{func} returns @code{nil} (as it
1804should be careful to do explicitly), Regi will reset the frame to the
1805first entry, and advance @samp{point} to the beginning of the next line.
1806If a list is returned from your function, it can contain any combination
1807of the following elements:@refill
1808
1809@table @asis
1810@item the symbol @code{continue}
1811This tells Regi to continue processing entries after a match, instead of
1812reseting the frame and moving @samp{point}. In this way, lines of text
1813can have multiple matches, but you have to be careful to avoid entering
1814infinite loops.
1815
1816@item the symbol @code{abort}
1817This tells Regi to terminate frame processing. However, any @code{end}
1818entry is still processed.
1819
1820@item the list @code{(frame . @var{newframe})}
1821This tells Regi to substitute @var{newframe} as the frame it is
1822interpreting. In other words, your @var{func} can modify the Regi frame
1823on the fly. @var{newframe} can be a variable containing a frame, or it
1824can be the frame in-lined.@refill
1825
1826@item the list @code{(step . @var{step})}
1827Tells Regi to move @var{step} number of lines forward as it continues
1828processing. By default, Regi moves forward one line. @var{step} can be
1829zero or negative of course, but watch out for infinite loops.@refill
1830@end table
1831
1832During execution of your @var{func}, the following variables will be
1833temporarily bound to some useful information:@refill
1834
1835@table @code
1836@item curline
1837The current line in the buffer that Regi is @code{looking-at}, as a string.
1838@item curframe
1839The current frame being interpreted.
1840@item curentry
1841The current frame entry being interpreted.
1842@end table
1843
1844@node Frames You Can Customize, Post-yank Formatting Commands, Using Regi, Configuring the Citation Engine
1845@comment node-name, next, previous, up
1846@vindex sc-nuke-mail-header
1847@section Frames You Can Customize
1848@ifinfo
1849
1850@end ifinfo
1851As mentioned earlier, Supercite uses various frames to perform
1852certain jobs such as mail header information extraction and mail header
1853nuking. However, these frames are not available for you to customize,
1854except through abstract interfaces such as @code{sc-nuke-mail-header},
1855et al.
1856
1857@vindex sc-default-cite-frame
1858However, the citation frames Supercite uses provide a lot of customizing
1859power and are thus available to you to change to suit your needs. The
1860workhorse of citation is the frame contained in the variable
1861@code{sc-default-cite-frame}. This frame recognizes many situations,
1862such as blank lines, which it interprets as paragraph separators. It
1863also recognizes previously cited nested and non-nested citations in the
1864original message. By default it will coerce non-nested citations into
1865your preferred citation style, and it will add a level of citation to
1866nested citations. It will also simply cite uncited lines in your
1867preferred style.
1868
1869@cindex unciting
1870@cindex reciting
1871@vindex sc-default-uncite-frame
1872@vindex sc-default-recite-frame
1873In a similar vein, there are default frames for @dfn{unciting} and
1874@dfn{reciting}, contained in the variables
1875@code{sc-default-uncite-frame} and @code{sc-default-recite-frame}
1876respectively.@refill
1877
1878As mentioned earlier (@pxref{Recognizing Citations}), citations are
1879recognized through the values of the regular expressions
1880@code{sc-citation-root-regexp}, et al. To recognize odd styles, you
1881could modify these variables, or you could modify the default citing
1882frame. Alternatively, you could set up association lists of frames for
1883recognizing specific alternative forms.
1884
1885@vindex sc-cite-frame-alist
1886@vindex sc-uncite-frame-alist
1887@vindex sc-recite-frame-alist
1888For each of the actions -- citing, unciting, and reciting -- an alist is
1889consulted to find the frame to use (@code{sc-cite-frame-alist},
1890@code{sc-uncite-frame-alist}, and @code{sc-recite-frame-alist}
1891respectively). These frames can contain alists of the form:
1892
1893@example
1894((@var{infokey} (@var{regexp} @. @var{frame}) (@var{regexp} @. @var{frame}) @dots{})
1895 (@var{infokey} (@var{regexp} @. @var{frame}) (@var{regexp} @. @var{frame}) @dots{})
1896 (@dots{}))
1897@end example
1898
1899@vindex sc-mail-field
1900@findex string-match
1901Where @var{infokey} is a key suitable for @code{sc-mail-field},
1902@var{regexp} is a regular expression which is @code{string-match}'d
1903against the value of the @code{sc-mail-field} key, and @var{frame} is
1904the frame to use if a match occurred. @var{frame} can be a variable
1905containing a frame or a frame in-lined.@refill
1906
1907When Supercite is about to cite, uncite, or recite a region, it consults
1908the appropriate alist and attempts to find a frame to use. If one
1909is not found from the alist, then the appropriate default frame is used.
1910
1911@node Post-yank Formatting Commands, Citing Commands, Frames You Can Customize, Top
1912@comment node-name, next, previous, up
1913@vindex sc-mode-map-prefix
1914@vindex mode-map-prefix (sc-)
1915@kindex C-c C-p
1916@chapter Post-yank Formatting Commands
1917@ifinfo
1918
1919@end ifinfo
1920Once the original message has been yanked into the reply buffer, and
1921@code{sc-cite-original} has had a chance to do its thing, a number of
1922useful Supercite commands will be available to you. Since there is wide
1923variety in the keymaps that MUAs set up in their reply buffers, it is
1924next to impossible for Supercite to properly sprinkle its commands into
1925the existing keymap. For this reason Supercite places its commands on a
1926separate keymap, putting this keymap onto a prefix key in the reply
1927buffer. You can customize the prefix key Supercite uses by changing the
1928variable @code{sc-mode-map-prefix}. By default, the
1929@code{sc-mode-map-prefix} is @kbd{C-c C-p}; granted, not a great choice,
1930but unfortunately the best general solution so far. In the rest of this
1931chapter, we'll assume you've installed Supercite's keymap on the default
1932prefix.@refill
1933
1934@ifinfo
1935@menu
1936* Citing Commands::
1937* Insertion Commands::
1938* Variable Toggling Shortcuts::
1939* Mail Field Commands::
1940* Miscellaneous Commands::
1941@end menu
1942@end ifinfo
1943
1944@node Citing Commands, Insertion Commands, Post-yank Formatting Commands, Post-yank Formatting Commands
1945@comment node-name, next, previous, up
1946@vindex sc-cite-region-limit
1947@section Commands to Manually Cite, Recite, and Uncite
1948@ifinfo
1949
1950@end ifinfo
1951Probably the three most common post-yank formatting operations that you
1952will perform will be the manual citing, reciting, and unciting of
1953regions of text in the reply buffer. Often you may want to recite a
1954paragraph to use a nickname, or manually cite a message when setting
1955@code{sc-cite-region-limit} to @code{nil}. The following commands
1956perform these functions on the region of text between @samp{point} and
1957@samp{mark}. Each of them sets the @dfn{undo boundary} before modifying
1958the region so that the command can be undone in the standard Emacs
1959way.@refill
1960
1961A quick note about Emacs 19. Unlike in Emacs 18, the region delimited
1962by @samp{point} and @samp{mark} can have two states. It can be
1963@dfn{active} or @dfn{inactive}. Although Emacs 19 and Lucid Emacs 19
1964use different terminology and functions, both employ the same convention
1965such that when the region is inactive, commands that modify the region
1966should generate an error. The user needs to explicitly activate the
1967region before successfully executing the command. All Supercite
1968commands conform to this convention.
1969
1970Here is the list of Supercite citing commands:
1971
1972@table @asis
1973@findex sc-cite-region
1974@findex cite-region (sc-)
1975@kindex C-c C-p c
1976@vindex sc-pre-cite-hook
1977@vindex pre-cite-hook (sc-)
1978@vindex sc-confirm-always-p
1979@vindex confirm-always-p
1980@kindex C-u
1981@item @code{sc-cite-region} (@kbd{C-c C-p c})
1982@comment
1983This command cites each line in the region of text by interpreting the
1984selected frame from @code{sc-cite-frame-alist}, or the default citing
1985frame @code{sc-default-cite-frame}. It runs the hook
1986@code{sc-pre-cite-hook} before interpreting the frame. With an optional
1987universal argument (@kbd{C-u}), it temporarily sets
1988@code{sc-confirm-always-p} to @code{t} so you can confirm the
1989attribution string for a single manual citing.
1990@xref{Configuring the Citation Engine}.@refill
1991
1992@findex sc-uncite-region
1993@findex uncite-region (sc-)
1994@kindex C-c C-p u
1995@item @code{sc-uncite-region} (@kbd{C-c C-p u})
1996@comment
1997This command removes any citation strings from the beginning of each
1998cited line in the region by interpreting the selected frame from
1999@code{sc-uncite-frame-alist}, or the default unciting frame
2000@code{sc-default-uncite-frame}. It runs the hook
2001@code{sc-pre-uncite-hook} before interpreting the frame.
2002@xref{Configuring the Citation Engine}.@refill
2003
2004@findex sc-recite-region
2005@findex recite-region (sc-)
2006@kindex C-c C-p r
2007@item @code{sc-recite-region} (@kbd{C-c C-p r})
2008@comment
2009This command recites each line the region by interpreting the selected
2010frame from @code{sc-recite-frame-alist}, or the default reciting frame
2011@code{sc-default-recite-frame}. It runs the hook
2012@code{sc-pre-recite-hook} before interpreting the frame.
2013@xref{Configuring the Citation Engine}.@refill
2014
2015@vindex sc-confirm-always-p
2016@vindex confirm-always-p (sc-)
2017Supercite will always ask you to confirm the attribution when reciting a
2018region, regardless of the value of @code{sc-confirm-always-p}.
2019@end table
2020
2021@node Insertion Commands, Variable Toggling Shortcuts, Citing Commands, Post-yank Formatting Commands
2022@comment node-name, next, previous, up
2023@section Insertion Commands
2024@ifinfo
2025
2026@end ifinfo
2027These two functions insert various strings into the reply buffer.
2028
2029@table @asis
2030@findex sc-insert-reference
2031@findex insert-reference (sc-)
2032@kindex C-c C-p w
2033@item @code{sc-insert-reference} (@kbd{C-c C-p w})
2034@comment
2035@vindex sc-preferred-header-style
2036@vindex preferred-header-style (sc-)
2037Inserts a reference header into the reply buffer at @samp{point}. With
2038no arguments, the header indexed by @code{sc-preferred-header-style} is
2039inserted. An optional numeric argument is the index into
2040@code{sc-rewrite-header-list} indicating which reference header to
2041write.@refill
2042
2043With just the universal argument (@kbd{C-u}), electric reference mode is
2044entered, regardless of the value of @code{sc-electric-references-p}.
2045
2046@findex sc-insert-citation
2047@findex insert-citation (sc-)
2048@kindex C-c C-p i
2049@item @code{sc-insert-citation} (@kbd{C-c C-p i})
2050@comment
2051Inserts the current citation string at the beginning of the line that
2052@samp{point} is on. If the line is already cited, Supercite will issue
2053an error and will not cite the line.
2054@end table
2055
2056@node Variable Toggling Shortcuts, Mail Field Commands, Insertion Commands, Post-yank Formatting Commands
2057@comment node-name, next, previous, up
2058@cindex toggling variables
2059@section Variable Toggling Shortcuts
2060@ifinfo
2061
2062@end ifinfo
2063Supercite defines a number of commands that make it easier for you to
2064toggle and set various Supercite variables as you are editing the reply
2065buffer. For example, you may want to turn off filling or whitespace
2066cleanup, but only temporarily. These toggling shortcut commands make
2067this easy to do.
2068
2069@kindex C-c C-p C-t
2070Like Supercite commands in general, the toggling commands are placed on
2071a keymap prefix within the greater Supercite keymap. For the default
2072value of @code{sc-mode-map-prefix}, this will be
2073@kbd{C-c C-p C-t}.@refill
2074
2075The following commands toggle the value of certain Supercite variables
2076which take only a binary value:
2077
2078@table @kbd
2079@item C-c C-p C-t b
2080Toggles the variable @code{sc-mail-nuke-blank-lines-p}.
2081
2082@item C-c C-p C-t c
2083Toggles the variable @code{sc-confirm-always-p}.
2084
2085@item C-c C-p C-t d
2086Toggles the variable @code{sc-downcase-p}.
2087
2088@item C-c C-p C-t e
2089Toggles the variable @code{sc-electric-references-p}.
2090
2091@item C-c C-p C-t f
2092Toggles the variable @code{sc-auto-fill-region-p}.
2093
2094@item C-c C-p C-t o
2095Toggles the variable @code{sc-electric-circular-p}.
2096
2097@item C-c C-p C-t s
2098Toggles the variable @code{sc-nested-citation-p}.
2099
2100@item C-c C-p C-t u
2101Toggles the variable @code{sc-use-only-preferences-p}.
2102
2103@item C-c C-p C-t w
2104Toggles the variable @code{sc-fixup-whitespace-p}.
2105@end table
2106
2107@findex set-variable
2108The following commands let you set the value of multi-value variables,
2109in the same way that Emacs' @code{set-variable} does:
2110
2111@table @kbd
2112@item C-c C-p C-t a
2113Sets the value of the variable @code{sc-preferred-attribution-list}.
2114
2115@item C-c C-p C-t l
2116Sets the value of the variable @code{sc-cite-region-limit}.
2117
2118@item C-c C-p C-t n
2119Sets the value of the variable @code{sc-mail-nuke-mail-headers}.
2120
2121@item C-c C-p C-t N
2122Sets the value of the variable @code{sc-mail-header-nuke-list}.
2123
2124@item C-c C-p C-t p
2125Sets the value of the variable @code{sc-preferred-header-style}.
2126@end table
2127
2128@kindex C-c C-p C-p
2129One special command is provided to toggle both
2130@code{sc-auto-fill-region-p} and @code{sc-fixup-whitespace-p} together.
2131This is because you typically want to run Supercite with either variable
2132as @code{nil} or non-@code{nil}. The command to toggle these variables
2133together is bound on @kbd{C-c C-p C-p}.@refill
2134
2135Finally, the command @kbd{C-c C-p C-t h} (also @kbd{C-c C-p C-t ?})
2136brings up a Help message on the toggling keymap.
2137
2138
2139@node Mail Field Commands, Miscellaneous Commands, Variable Toggling Shortcuts, Post-yank Formatting Commands
2140@comment node-name, next, previous, up
2141@section Mail Field Commands
2142@ifinfo
2143
2144@end ifinfo
2145These commands allow you to view, modify, add, and delete various bits
2146of information from the info alist.
2147@xref{Information Keys and the Info Alist}.@refill
2148
2149@table @asis
2150@kindex C-c C-p f
2151@findex sc-mail-field-query
2152@findex mail-field-query (sc-)
2153@kindex C-c C-p f
2154@item @code{sc-mail-field-query} (@kbd{C-c C-p f})
2155@comment
2156Allows you to interactively view, modify, add, and delete info alist
2157key-value pairs. With no argument, you are prompted (with completion)
2158for a info key. The value associated with that key is displayed in the
2159minibuffer. With an argument, this command will first ask if you want
2160to view, modify, add, or delete an info key. Viewing is identical to
2161running the command with no arguments.
2162
2163If you want to modify the value of a key, Supercite will first prompt
2164you (with completion) for the key of the value you want to change. It
2165will then put you in the minibuffer with the key's current value so you
2166can edit the value as you wish. When you hit @key{RET}, the key's value
2167is changed. For those of you running Emacs 19, minibuffer history is
2168kept for the values.
2169
2170If you choose to delete a key-value pair, Supercite will prompt you (with
2171completion) for the key to delete.
2172
2173If you choose to add a new key-value pair, Supercite firsts prompts you
2174for the key to add. Note that completion is turned on for this prompt,
2175but you can type any key name here, even one that does not yet exist.
2176After entering the key, Supercite prompts you for the key's value. It
2177is not an error to enter a key that already exists, but the new value
2178will override any old value. It will not replace it though; if you
2179subsequently delete the key-value pair, the old value will reappear.
2180
2181@findex sc-mail-process-headers
2182@findex mail-process-headers (sc-)
2183@kindex C-c C-p g
2184@item @code{sc-mail-process-headers} (@kbd{C-c C-p g})
2185@comment
2186This command lets you re-initialize Supercite's info alist from any set
2187of mail headers in the region between @samp{point} and @samp{mark}.
2188This function is especially useful for replying to digest messages where
2189Supercite will initially set up its information for the digest
2190originator, but you want to cite each component article with the real
2191message author. Note that unless an error during processing occurs, any
2192old information is lost.@refill
2193@end table
2194
2195@node Miscellaneous Commands, Information Keys and the Info Alist, Mail Field Commands, Post-yank Formatting Commands
2196@comment node-name, next, previous, up
2197@section Miscellaneous Commands
2198@ifinfo
2199
2200@end ifinfo
2201@table @asis
2202@findex sc-open-line
2203@findex open-line (sc-)
2204@findex open-line
2205@kindex C-c C-p o
2206@item @code{sc-open-line} (@kbd{C-c C-p o})
2207@comment
2208Similar to Emacs' standard @code{open-line} commands, but inserts the
2209citation string in front of the new line. As with @code{open-line},
2210an optional numeric argument inserts that many new lines.@refill
2211
2212@findex sc-describe
2213@findex describe (sc-)
2214@kindex C-c C-p ?
2215@kindex C-c C-p h
2216@item @code{sc-describe} (@kbd{C-c C-p h} and @kbd{C-c C-p ?})
2217@comment
2218This function has been obsoleted by the @TeX{}info manual you are now
2219reading. It is still provided for compatibility, but it will eventually
2220go away.
2221
2222@findex sc-version
2223@findex version (sc-)
2224@kindex C-c C-p v
2225@item @code{sc-version} (@kbd{C-c C-p v})
2226@comment
2227Echos the version of Supercite you are using. With the optional
2228universal argument (@kbd{C-u}), this command inserts the version
2229information into the current buffer.
2230
2231@findex sc-submit-bug-report
2232@findex submit-bug-report (sc-)
2233@kindex C-c C-p C-b
2234@item @code{sc-submit-bug-report} (@kbd{C-c C-p C-b})
2235@comment
2236If you encounter a bug, or wish to suggest an enhancement, use this
2237command to set up an outgoing mail buffer, with the proper address to
2238the Supercite maintainer automatically inserted in the @samp{To:@:}
2239field. This command also inserts information that the Supercite
2240maintainer can use to recreate your exact setup, making it easier to
2241verify your bug.
2242@end table
2243
2244@node Hints to MUA Authors, Version 3 Changes, Electric References, Top
2245@comment node-name, next, previous, up
2246@chapter Hints to MUA Authors
2247@ifinfo
2248
2249@end ifinfo
2250In June of 1989, some discussion was held between the various MUA
2251authors, the Supercite author, and other Supercite users. These
2252discussions centered around the need for a standard interface between
2253MUAs and Supercite (or any future Supercite-like packages). This
2254interface was formally proposed by Martin Neitzel on Fri, 23 Jun 89, in
2255a mail message to the Supercite mailing list:
2256
2257@example
2258 Martin> Each news/mail-reader should provide a form of
2259 Martin> mail-yank-original that
2260
2261 Martin> 1: inserts the original message incl. header into the
2262 Martin> reply buffer; no indentation/prefixing is done, the header
2263 Martin> tends to be a "full blown" version rather than to be
2264 Martin> stripped down.
2265
2266 Martin> 2: `point' is at the start of the header, `mark' at the
2267 Martin> end of the message body.
2268
2269 Martin> 3: (run-hooks 'mail-yank-hooks)
2270
2271 Martin> [Supercite] should be run as such a hook and merely
2272 Martin> rewrite the message. This way it isn't anymore
2273 Martin> [Supercite]'s job to gather the original from obscure
2274 Martin> sources. [@dots{}]
2275@end example
2276
2277@vindex mail-citation-hook
2278@vindex mail-yank-hooks
2279@cindex sendmail.el
2280@findex mail-yank-original
2281@findex defvar
2282This specification was adopted, but with the recent release of
2283Emacs 19, it has undergone a slight modification. Instead of the
2284variable @code{mail-yank-hooks}, the new preferred hook variable that
2285the MUA should provide is @code{mail-citation-hook}.
2286@code{mail-yank-hooks} can be provided for backward compatibility, but
2287@code{mail-citation-hook} should always take precedence. Richard
2288Stallman (of the FSF) suggests that the MUAs should @code{defvar}
2289@code{mail-citation-hook} to @code{nil} and perform some default citing
2290when that is the case. Take a look at Emacs 19's @file{sendmail.el}
2291file, specifically the @code{mail-yank-original} defun for
2292details.@refill
2293
2294If you are writing a new MUA package, or maintaining an existing MUA
2295package, you should make it conform to this interface so that your users
2296will be able to link Supercite easily and seamlessly. To do this, when
2297setting up a reply or forward buffer, your MUA should follow these
2298steps:
2299
2300@enumerate
2301@item
2302Insert the original message, including the mail headers into the reply
2303buffer. At this point you should not modify the raw text in any way, and
2304you should place all the original headers into the body of the reply.
2305This means that many of the mail headers will be duplicated, one copy
2306above the @code{mail-header-separator} line and one copy below,
2307however there will probably be more headers below this line.@refill
2308
2309@item
2310Set @samp{point} to the beginning of the line containing the first mail
2311header in the body of the reply. Set @samp{mark} at the end of the
2312message text. It is very important that the region be set around the
2313text Supercite is to modify and that the mail headers are within this
2314region. Supercite will not venture outside the region for any reason,
2315and anything within the region is fair game, so don't put anything that
2316@strong{must} remain unchanged inside the region. Further note that for
2317Emacs 19, the region need not be set active. Supercite will work
2318properly when the region is inactive, as should any other like-minded
2319package.@refill
2320
2321@item
2322Run the hook @code{mail-citation-hook}. You will probably want to
2323provide some kind of default citation functions in cases where the user
2324does not have Supercite installed. By default, your MUA should
2325@code{defvar} @code{mail-citation-hook} to @code{nil}, and in your
2326yanking function, check its value. If it finds
2327@code{mail-citation-hook} to be @code{nil}, it should perform some
2328default citing behavior. User who want to connect to Supercite then
2329need only add @code{sc-cite-original} to this list of hooks using
2330@code{add-hook}.@refill
2331@end enumerate
2332
2333If you do all this, your users will not need to overload your routines
2334to use Supercite, and your MUA will join the ranks of those that conform
2335to this interface ``out of the box.''
2336
2337@node Version 3 Changes, Thanks and History, Hints to MUA Authors, Top
2338@comment node-name, next, previous, up
2339@chapter Version 3 Changes
2340@ifinfo
2341
2342@end ifinfo
2343@cindex sc-unsupp.el file
2344With version 3, Supercite has undergone an almost complete rewrite, and
2345has hopefully benefited in a number of ways, including vast
2346improvements in the speed of performance, a big reduction in size of the
2347code and in the use of Emacs resources, and a much cleaner and flexible
2348internal architecture. The central construct of the info alist, and its
2349role in Supercite has been expanded, and the other central concept, the
2350general package Regi, was developed to provide a theoretically unlimited
2351flexibility.
2352
2353But most of this work is internal and not of very great importance to the
2354casual user. There have been some changes at the user-visible level,
2355but for the most part, the Supercite configuration variables from
2356version 2 should still be relevant to version 3. Below, I briefly
2357outline those user-visible things that have changed since version 2. For
2358details, look to other sections of this manual.
2359
2360@enumerate
2361@item
2362@cindex supercite.el file
2363@cindex reporter.el file
2364@cindex regi.el file
2365@cindex sc.el from version 2
2366@cindex sc-elec.el from version 2
2367Supercite proper now comes in a single file, @file{supercite.el}, which
2368contains everything except the unsupported noodlings, overloading (which
2369should be more or less obsolete with the release of Emacs 19), and the
2370general lisp packages @file{reporter.el} and @file{regi.el}. Finally,
2371the @TeX{}info manual comes in its own file as well. In particular, the
2372file @file{sc.el} from the version 2 distribution is obsolete, as is the
2373file @file{sc-elec.el}.
2374
2375@item
2376@code{sc-spacify-name-chars} is gone in version 3.
2377
2378@item
2379@vindex sc-attrib-selection-list
2380@vindex attrib-selection-list
2381@code{sc-nickname-alist} is gone in version 3. The
2382@code{sc-attrib-selection-list} is a more general construct supporting
2383the same basic feature.
2384
2385@item
2386The version 2 variable @code{sc-preferred-attribution} has been changed
2387to @code{sc-preferred-attribution-list}, and has been expanded upon to
2388allow you to specify an ordered list of preferred attributions.
2389
2390@item
2391@code{sc-mail-fields-list} has been removed, and header nuking in
2392general has been greatly improved, giving you wider flexibility in
2393specifying which headers to keep and remove while presenting a
2394simplified interface to commonly chosen defaults.
2395
2396@item
2397Post-yank paragraph filling has been completely removed from Supercite,
2398other packages just do it better than Supercite ever would. Supercite
2399will still fill newly cited paragraphs.
2400
2401@item
2402@vindex sc-cite-region-limit
2403@vindex cite-region-limit
2404The variable @code{sc-all-but-cite-p} has been replaced by
2405@code{sc-cite-region-limit}.
2406
2407@item
2408Keymap hacking in the reply buffer has been greatly simplified, with, I
2409believe, little reduction in functionality.
2410
2411@item
2412Hacking of the reply buffer's docstring has been completely eliminated.
2413@end enumerate
2414
2415@node Thanks and History, The Supercite Mailing List, Version 3 Changes, Top
2416@comment node-name, next, previous, up
2417@chapter Thanks and History
2418@ifinfo
2419
2420@end ifinfo
2421The Supercite package was derived from its predecessor Superyank 1.11
2422which was inspired by various bits of code and ideas from Martin Neitzel
2423and Ashwin Ram. They were the folks who came up with the idea of
2424non-nested citations and implemented some rough code to provide this
2425style. Superyank and Supercite version 2 evolved to the point where much
2426of the attribution selection mechanism was automatic, and features have
2427been continuously added through the comments and suggestions of the
2428Supercite mailing list participants. Supercite version 3 represents a
2429nearly complete rewrite with many of the algorithms and coding styles
2430being vastly improved. Hopefully Supercite version 3 is faster,
2431smaller, and much more flexible than its predecessors.
2432
2433In the version 2 manual I thanked some specific people for their help in
2434developing Supercite 2. You folks know who you are and your continued
2435support is greatly appreciated. I wish to thank everyone on the
2436Supercite mailing list, especially the brave alpha testers, who helped
2437considerably in testing out the concepts and implementation of Supercite
2438version 3. Special thanks go out to the MUA and Emacs authors Kyle
2439Jones, Stephen Gildea, Richard Stallman, and Jamie Zawinski for coming
2440to a quick agreement on the new @code{mail-citation-hook} interface, and
2441for adding the magic lisp to their code to support this.
2442
2443All who have helped and contributed have been greatly appreciated.
2444
2445@node The Supercite Mailing List, Concept Index, Thanks and History, Top
2446@comment node-name, next, previous, up
2447@cindex supercite mailing list address
2448@cindex mailing list address
2449@chapter The Supercite Mailing List
2450@ifinfo
2451
2452@end ifinfo
2453The author runs a simple mail expanding mailing list for discussion of
2454issues related to Supercite. This includes enhancement requests, bug
2455reports, general help questions, etc. To subscribe or unsubscribe to
2456the mailing list, send a request to the administrative address:
2457
2458@example
2459supercite-request@@python.org
2460@end example
2461
2462Please be sure to include the most reliable and shortest (preferably
2463Internet) address back to you. To post articles to the list, send your
2464message to this address (you do not need to be a member to post, but be
2465sure to indicate this in your article or replies may not be CC'd to
2466you):
2467
2468@example
2469supercite@@python.org
2470@end example
2471
2472If you are sending bug reports, they should go to the following address,
2473but @emph{please}! use the command @code{sc-submit-bug-report} since it
2474will be much easier for me to duplicate your problem if you do so. It
2475will set up a mail buffer automatically with this address on the
2476@samp{To:@:} line:
2477
2478@example
2479supercite-help@@python.org
2480@end example
2481
2482@node Concept Index, Command Index, The Supercite Mailing List, Top
2483@comment node-name, next, previous, up
2484@unnumbered Concept Index
2485@printindex cp
2486
2487@node Command Index, Key Index, Concept Index, Top
2488@comment node-name, next, previous, up
2489@unnumbered Command Index
2490@ifinfo
2491
2492@end ifinfo
2493Since all supercite commands are prepended with the string
2494``@code{sc-}'', each appears under its @code{sc-}@var{command} name and
2495its @var{command} name.
2496@iftex
2497@sp 2
2498@end iftex
2499@printindex fn
2500
2501@node Key Index, Variable Index, Command Index, Top
2502@comment node-name, next, previous, up
2503@unnumbered Key Index
2504@printindex ky
2505
2506@node Variable Index, , Key Index, Top
2507@comment node-name, next, previous, up
2508@unnumbered Variable Index
2509@ifinfo
2510
2511@end ifinfo
2512Since all supercite variables are prepended with the string
2513``@code{sc-}'', each appears under its @code{sc-}@var{variable} name and
2514its @var{variable} name.
2515@iftex
2516@sp 2
2517@end iftex
2518@printindex vr
56f7c94a 2519@setchapternewpage odd
6bf7aab6
DL
2520@summarycontents
2521@contents
2522@bye