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