1 \input texinfo @comment -*-texinfo-*-
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
10 @c @setchapternewpage odd % For book style double sided manual.
11 @comment %**end of header (This is for running Texinfo on a region.)
14 This document describes the Supercite Version 3.1 package for citing and
15 attributing the replies for various GNU Emacs mail and news reading
18 Copyright @copyright{} 1993, 2001, 2002 Free Software Foundation, Inc.
21 Permission is granted to copy, distribute and/or modify this document
22 under the terms of the GNU Free Documentation License, Version 1.1 or
23 any later version published by the Free Software Foundation; with no
24 Invariant Sections, with the Front-Cover texts being ``A GNU
25 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
26 license is included in the section entitled ``GNU Free Documentation
27 License'' in the Emacs manual.
29 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
30 this GNU Manual, like GNU software. Copies published by the Free
31 Software Foundation raise funds for GNU development.''
33 This document is part of a collection distributed under the GNU Free
34 Documentation License. If you want to distribute this document
35 separately from the collection, you can do so by adding a copy of the
36 license to the document, as described in section 6 of the license.
44 * SC: (sc). Supercite lets you cite parts of messages you're
45 replying to, in flexible ways.
50 @center @titlefont{Supercite User's Manual}
52 @center @titlefont{Supercite Version 3.1}
54 @center Manual Revision: 3.47
57 @center Barry A@. Warsaw
58 @center @t{bwarsaw@@cen.com}
59 @center @t{@dots{}!uunet!cen.com!bwarsaw}
61 @vskip 0pt plus 1filll
66 @node Top, Introduction, (dir), (dir)
67 @comment node-name, next, previous, up
69 This document describes the Supercite Version 3.1 package for citing and
70 attributing the replies for various GNU Emacs mail and news reading
71 subsystems. The manual is divided into the following chapters.
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::
83 * Hints to MUA Authors::
85 * Thanks and History::
86 * The Supercite Mailing List::
96 @node Introduction, Usage Overview, Top, Top
97 @comment node-name, next, previous, up
102 Supercite version 3.1 is a GNU Emacs package written entirely in Emacs
103 Lisp. It interfaces to most of the commonly used Emacs mail user agents
104 (@dfn{MUAs}) and news user agents (@dfn{NUAs}), and provides
105 sophisticated facilities for the citing and attributing of message
106 replies. Supercite has a very specific and limited role in the process
107 of composing replies to both USENET network news and electronic mail.
109 The preferred way to spell Supercite is with a capital @samp{S},
110 lowercase @samp{upercite}. There are a few alternate spellings out there
111 and I won't be terribly offended if you use them. People often ask
117 * What Supercite Does Not Do::
118 * What Supercite Does::
124 Supercite is only useful in conjunction with MUAs and NUAs such as VM,
125 GNUS, RMAIL, etc@. (hereafter referred to collectively as MUAs).
126 Supercite is typically called by the MUA after a reply buffer has been
127 setup. Thereafter, Supercite's many commands and formatting styles are
128 available in that reply buffer until the reply is sent. Supercite is
129 re-initialized in each new reply buffer.
131 Supercite is currently at major revision 3.1, and is known to work in the
132 following environments:
135 @item Emacs versions:
136 GNU Emacs 18.57 through 18.59, all Emacs 19,
137 all current Lucid Emacs, and Epoch 4.@refill
140 VM 4.37 and beyond (including VM version 5), RMAIL, MH-E 3.7 and
141 beyond, PCMAIL.@refill
144 RNEWS, GNUS 3.12 and beyond, GNEWS.@refill
147 For systems with version numbers, all known subsequent versions also
148 work with Supercite. For those systems without version numbers,
149 Supercite probably works with any recently released version. Note that
150 only some of these systems will work with Supercite ``out of the box.''
151 All others must overload interfacing routines to supply the necessary
152 glue. @xref{Getting Connected}, for more details.@refill
155 @node Usage Overview, What Supercite Does Not Do, Introduction, Introduction
156 @comment node-name, next, previous, up
162 @cindex attribute, attributing
164 @section Usage Overview
168 Typical usage is as follows. You want to reply or followup to a message
169 in your MUA. You will probably hit @kbd{r} (i.e., ``reply'') or @kbd{f}
170 (i.e., ``forward'') to begin composing the reply. In response, the MUA
171 will create a reply buffer and initialize the outgoing mail headers
172 appropriately. The body of the reply will usually be empty at this
173 point. You now decide that you would like to include part of the
174 original message in your reply. To do this, you @dfn{yank} the original
175 message into the reply buffer, typically with a key stroke such as
176 @kbd{C-c C-y}. This sequence will invoke an MUA-specific function which
177 fills the body of the reply with the original message and then
178 @dfn{attributes} this text to its author. This is called @dfn{citing}
179 and its effect is to prefix every line from the original message with a
180 special text tag. Most MUAs provide some default style of citing; by
181 using Supercite you gain a wider flexibility in the look and style of
182 citations. Supercite's only job is to cite the original message.
184 @node What Supercite Does Not Do, What Supercite Does, Usage Overview, Introduction
185 @comment node-name, next, previous, up
186 @section What Supercite Doesn't Do
190 Because of this clear division of labor, there are useful features which
191 are the sole responsibility of the MUA, even though it might seem that
192 Supercite should provide them. For example, many people would like to
193 be able to yank (and cite) only a portion of the original message.
194 Since Supercite only modifies the text it finds in the reply buffer as
195 set up by the MUA, it is the MUA's responsibility to do partial yanking.
196 @xref{Reply Buffer Initialization}.@refill
198 @vindex mail-header-separator
200 Another potentially useful thing would be for Supercite to set up the
201 outgoing mail headers with information it gleans from the reply buffer.
202 But by previously agreed upon convention, any text above the
203 @code{mail-header-separator} which separates mail headers from message
204 bodies cannot be modified by Supercite. Supercite, in fact, doesn't
205 know anything about the meaning of these headers, and never ventures
206 outside the designated region. @xref{Hints to MUA Authors}, for more
209 @node What Supercite Does, Citations, What Supercite Does Not Do, Introduction
210 @comment node-name, next, previous, up
211 @findex sc-cite-original
212 @section What Supercite Does
216 Supercite is invoked for the first time on a reply buffer via your MUA's
217 reply or forward command. This command will actually perform citations
218 by calling a hook variable to which Supercite's top-level function
219 @code{sc-cite-original} has been added. When @code{sc-cite-original} is
220 executed, the original message must be set up in a very specific way,
221 but this is handled automatically by the MUA. @xref{Hints to MUA
225 The first thing Supercite does, via @code{sc-cite-original}, is to parse
226 through the original message's mail headers. It saves this data in an
227 @dfn{information association list}, or @dfn{info alist}. The information
228 in this list is used in a number of places throughout Supercite.
229 @xref{Information Keys and the Info Alist}.@refill
231 @cindex nuking mail headers
232 @cindex reference header
233 After the mail header info is extracted, the headers are optionally
234 removed (@dfn{nuked}) from the reply. Supercite then writes a
235 @dfn{reference header} into the buffer. This reference header is a
236 string carrying details about the citation it is about to perform.
239 Next, Supercite visits each line in the reply, transforming the line
240 according to a customizable ``script.'' Lines which were not previously
241 cited in the original message are given a citation, while already cited
242 lines remain untouched, or are coerced to your preferred style.
243 Finally, Supercite installs a keymap into the reply buffer so that you
244 have access to Supercite's post-yank formatting and reciting commands as
245 you subsequently edit your reply. You can tell that Supercite has been
246 installed into the reply buffer because that buffer's modeline will
247 display the minor mode string @samp{SC}.
252 @findex fill-paragraph
254 When the original message is cited by @code{sc-cite-original}, it will
255 (optionally) be filled by Supercite. However, if you manually edit the
256 cited text and want to re-fill it, you must use an add-on package such
257 as @cite{filladapt} or @cite{gin-mode}. These packages can recognize
258 Supercited text and will fill them appropriately. Emacs' built-in
259 filling routines, e.g@. @code{fill-paragraph}, do not recognize cited
260 text and will not re-fill them properly because it cannot guess the
261 @code{fill-prefix} being used.
262 @xref{Post-yank Formatting Commands}, for details.@refill
264 As mentioned above, Supercite provides commands to recite or uncite
265 regions of text in the reply buffer, and commands to perform other
266 beautifications on the cited original text, maintaining consistent and
267 informative citations throughout. Supercite tries to be as configurable
268 as possible to allow for a wide range of personalized citation styles,
269 but it is also immediately useful with the default configuration, once
270 it has been properly connected to your MUA. @xref{Getting Connected},
271 for more details.@refill
273 @node Citations, Citation Elements, What Supercite Does, Top
274 @comment node-name, next, previous, up
275 @cindex nested citations
282 A @dfn{citation} is the acknowledgement of the original author of a mail
283 message in the body of the reply. There are two basic citation styles
284 which Supercite supports. The first, called @dfn{nested citations} is
285 an anonymous form of citation; in other words, an indication is made
286 that the cited line was written by someone @emph{other} that the current
287 message author (i.e., other than you, the person composing the reply),
288 but no reference is made as to the identity of the original author.
289 This style should look familiar since its use on the net is widespread.
290 Here's an example of what a message buffer would look like using nested
291 citations after multiple replies:
294 >> John originally wrote this
296 > Jane said that John didn't know
297 > what he was talking about
298 And that's what I think too.
303 * Citation Elements::
304 * Recognizing Citations::
308 Note that multiple inclusions of the original messages result in a
309 nesting of the @samp{@code{>}} characters. This can sometimes be quite
310 confusing when many levels of citations are included since it may be
311 difficult or impossible to figure out who actually participated in the
312 thread, and multiple nesting of @samp{@code{>}} characters can sometimes
313 make the message very difficult for the eye to scan.
315 @cindex non-nested citations
316 In @dfn{non-nested citations}, each cited line begins with an
317 informative string attributing that line to the original author. Only
318 the first level of attribution will be shown; subsequent citations don't
319 nest the citation strings. The above dialog might look like this when
320 non-nested citations are used:
323 John> John originally wrote this
324 John> and this as well
325 Jane> Jane said that John didn't know
326 Jane> what he was talking about
327 And that's what I think too.
330 Notice here that my inclusion of Jane's inclusion of John's original
331 message did not result in a line cited with @samp{Jane>John>}.
333 @vindex sc-nested-citation-p
334 @vindex nested-citation-p (sc-)
335 Supercite supports both styles of citation, and the variable
336 @code{sc-nested-citation-p} controls which style it will use when citing
337 previously uncited text. When this variable is @code{nil} (the default),
338 non-nested citations are used. When non-@code{nil}, nested citations
342 @node Citation Elements, Recognizing Citations, Citations, Citations
343 @comment node-name, next, previous, up
344 @cindex citation string
346 @section Citation Elements
350 @dfn{Citation strings} are composed of one or more elements. Non-nested
351 citations are composed of four elements, three of which are directly
352 user definable. The elements are concatenated together, in this order:
354 @cindex citation leader
355 @vindex citation-leader (sc-)
356 @vindex sc-citation-leader
359 The @dfn{citation leader}. The citation leader is contained in the
360 variable @code{sc-citation-leader}, and has the default value of a
361 string containing four spaces.
363 @cindex attribution string
365 The @dfn{attribution string}. This element is supplied automatically by
366 Supercite, based on your preferences and the original message's mail
367 headers, though you may be asked to confirm Supercite's choice.
368 @xref{Selecting an Attribution}, for more details.@refill
370 @cindex citation delimiter
371 @vindex sc-citation-delimiter
372 @vindex citation-delimiter (sc-)
374 The @dfn{citation delimiter}. This string, contained in the variable
375 @code{sc-citation-delimiter} visually separates the citation from the
376 text of the line. This variable has a default value of @code{">"} and
377 for best results, the string should consist of only a single character.
379 @cindex citation separator
380 @vindex citation-separator (sc-)
381 @vindex sc-citation-separator
383 The @dfn{citation separator}. The citation separator is contained in
384 the variable @code{sc-citation-separator}, and has the default value of
385 a string containing a single space.
388 For example, suppose you were using the default values for the above
389 variables, and Supercite provided the attribution string @samp{Jane}.
390 In this case, the composed, non-nested citation string used might be
392 @code{@asis{" Jane> "}}.
393 This citation string will be inserted in front of
394 every line in the original message that is not already cited.@refill
396 Nested citations, being simpler than non-nested citations, are composed
397 of the same elements, sans the attribution string. Supercite is smart
398 enough to not put additional spaces between citation delimiters for
399 multi-level nested citations.
401 @node Recognizing Citations, Getting Connected, Citation Elements, Citations
402 @comment node-name, next, previous, up
403 @section Recognizing Citations
407 Supercite also recognizes citations in the original article, and can
408 transform these already cited lines in a number of ways. This is how
409 Supercite suppresses the multiple citing of non-nested citations.
410 Recognition of cited lines is controlled by variables analogous to those
411 that make up the citation string as mentioned previously.
413 @vindex sc-citation-leader-regexp
414 @vindex citation-leader-regexp (sc-)
415 @vindex sc-citation-delimiter-regexp
416 @vindex citation-delimiter-regexp (sc-)
417 @vindex sc-citation-separator-regexp
418 @vindex citation-separator-regexp (sc-)
419 @vindex sc-citation-root-regexp
420 @vindex citation-root-regexp (sc-)
421 @vindex sc-citation-nonnested-root-regexp
422 @vindex citation-nonnested-root-regexp (sc-)
424 The variable @code{sc-citation-leader-regexp} describes how citation
425 leaders can look, by default it matches any number of spaces or tabs.
426 Note that since the lisp function @code{looking-at} is used to do the
427 matching, if you change this variable it need not start with a leading
430 Similarly, the variables @code{sc-citation-delimiter-regexp} and
431 @code{sc-citation-separator-regexp} respectively describe how citation
432 delimiters and separators can look. They follow the same rule as
433 @code{sc-citation-leader-regexp} above.
435 When Supercite composes a citation string, it provides the attribution
436 automatically. The analogous variable which handles recognition of the
437 attribution part of citation strings is @code{sc-citation-root-regexp}.
438 This variable describes the attribution root for both nested and
439 non-nested citations. By default it can match zero-to-many alphanumeric
440 characters (also ``.'', ``-'', and ``_''). But in some situations,
441 Supercite has to determine whether it is looking at a nested or
442 non-nested citation. Thus the variable
443 @code{sc-citation-nonnested-root-regexp} is used to describe only
444 non-nested citation roots. It is important to remember that if you
445 change @code{sc-citation-root-regexp} you should always also change
446 @code{sc-citation-nonnested-root-regexp}.@refill
448 @node Information Keys and the Info Alist, Reference Headers, Miscellaneous Commands, Top
449 @comment node-name, next, previous, up
450 @cindex information keys
452 @cindex information extracted from mail fields
453 @findex sc-mail-field
454 @findex mail-field (sc-)
456 @chapter Information Keys and the Info Alist
460 @dfn{Mail header information keys} are nuggets of information that
461 Supercite extracts from the various mail headers of the original
462 message, placed in the reply buffer by the MUA. Information is kept in
463 the @dfn{Info Alist} as key-value pairs, and can be retrieved for use in
464 various places within Supercite, such as in header rewrite functions and
465 attribution selection. Other bits of data, composed and created by
466 Supercite, are also kept as key-value pairs in this alist. In the case
467 of mail fields, the key is the name of the field, omitting the trailing
468 colon. Info keys are always case insensitive (as are mail headers), and
469 the value for a corresponding key can be retrieved from the alist with
470 the @code{sc-mail-field} function. Thus, if the following fields were
471 present in the original article:@refill
474 Date:@: 08 April 1991, 17:32:09 EST
475 Subject:@: Better get out your asbestos suit
481 then, the following lisp constructs return:
484 (sc-mail-field "date")
485 ==> "08 April 1991, 17:32:09 EST"
487 (sc-mail-field "subject")
488 ==> "Better get out your asbestos suit"
491 Since the argument to @code{sc-mail-field} can be any string, it is
492 possible that the mail field will not be present on the info alist
493 (possibly because the mail header was not present in the original
494 message). In this case, @code{sc-mail-field} will return the value of
495 the variable @code{sc-mumble}.
497 Supercite always places all mail fields found in the yanked original
498 article into the info alist. If possible, Supercite will also places
499 the following keys into the info alist:
502 @cindex sc-attribution info field
503 @cindex attribution info field (sc-)
504 @item "sc-attribution"
505 the selected attribution string.
507 @cindex sc-citation info field
508 @cindex citation info field (sc-)
510 the non-nested citation string.
512 @cindex sc-from-address info field
513 @cindex from-address info field (sc-)
514 @item "sc-from-address"
515 email address extracted from the @samp{From:@:} field.
517 @cindex sc-reply-address info field
518 @cindex reply-address info field (sc-)
519 @item "sc-reply-address"
520 email address extracted from the @samp{Reply-To:@:} field.
522 @cindex sc-sender-address info field
523 @cindex sender-address info field (sc-)
524 @item "sc-sender-address"
525 email address extracted from the @samp{Sender:@:} field.
527 @cindex sc-emailname info field
528 @cindex emailname info field (sc-)
530 email terminus extracted from the @samp{From:@:} field.
532 @cindex sc-initials info field
533 @cindex initials info field (sc-)
535 the author's initials.
537 @cindex sc-author info field
538 @cindex author info field (sc-)
540 the author's full name.
542 @cindex sc-firstname info field
543 @cindex firstname info field (sc-)
545 the author's first name.
547 @cindex sc-lastname info field
548 @cindex lastname info field (sc-)
550 the author's last name.
552 @cindex sc-middlename-1 info field
553 @cindex middlename-1 info field (sc-)
554 @item "sc-middlename-1"
555 the author's first middle name.
558 If the author's name has more than one middle name, they will appear as
559 info keys with the appropriate index (e.g., @code{"sc-middlename-2"},
560 @dots{}). @xref{Selecting an Attribution}.@refill
562 @node Reference Headers, The Built-in Header Rewrite Functions, Information Keys and the Info Alist, Top
563 @comment node-name, next, previous, up
564 @cindex reference headers
565 @chapter Reference Headers
569 Supercite will insert an informative @dfn{reference header} at the
570 beginning of the cited body of text, which display more detail about the
571 original article and provides the mapping between the attribution and
572 the original author in non-nested citations. Whereas the citation
573 string usually only contains a portion of the original author's name,
574 the reference header can contain such information as the author's full
575 name, email address, the original article's subject, etc. In fact any
576 information contained in the info alist can be inserted into a reference
581 * The Built-in Header Rewrite Functions::
582 * Electric References::
586 @cindex header rewrite functions
587 @vindex sc-rewrite-header-list
588 @vindex rewrite-header-list (sc-)
589 There are a number of built-in @dfn{header rewrite functions} supplied
590 by Supercite, but you can write your own custom header rewrite functions
591 (perhaps using the built-in ones as examples). The variable
592 @code{sc-rewrite-header-list} contains the list of such header rewrite
593 functions. This list is consulted both when inserting the initial
594 reference header, and when displaying @dfn{electric references}.
595 @xref{Electric References}.
597 @vindex sc-preferred-header-style
598 @vindex preferred-header-style (sc-)
599 When Supercite is initially run on a reply buffer (via
600 @code{sc-cite-original}), it will automatically call one of these
601 functions. The one it uses is defined in the variable
602 @code{sc-preferred-header-style}. The value of this variable is an
603 integer which is an index into the @code{sc-rewrite-header-list},
606 @node The Built-in Header Rewrite Functions, Electric References, Reference Headers, Reference Headers
607 @comment node-name, next, previous, up
608 @cindex header rewrite functions, built-in
610 @section The Built-in Header Rewrite Functions
614 Below are examples of the various built-in header rewrite functions.
615 Please note the following:@: first, the text which appears in the
616 examples below as @var{infokey} indicates that the corresponding value
617 of the info key from the info alist will be inserted there.
618 (@pxref{Information Keys and the Info Alist}). For example, in @code{sc-header-on-said}
619 below, @var{date} and @var{from} correspond to the values of the
620 @samp{Date:@:} and @samp{From:@:} mail headers respectively.@refill
622 @vindex sc-reference-tag-string
623 @vindex reference-tag-string (sc-)
624 Also, the string @code{">>>>>"} below is really the value of the
625 variable @code{sc-reference-tag-string}. This variable is used in all
626 built-in header rewrite functions, and you can customize its value to
627 change the tag string globally.
629 Finally, the references headers actually written may omit certain parts
630 of the header if the info key associated with @var{infokey} is not
631 present in the info alist. In fact, for all built-in headers, if the
632 @samp{From:@:} field is not present in the mail headers, the entire
633 reference header will be omitted (but this usually signals a serious
634 problem either in your MUA or in Supercite's installation).
638 @findex no-header (sc-)
640 This function produces no header. It should be used instead of
641 @code{nil} to produce a blank header. This header can possibly contain
642 a blank line after the @code{mail-header-separator} line.
644 @item sc-no-blank-line-or-header
645 @findex sc-no-blank-line-or-header
646 @findex no-blank-line-or-header (sc-)
647 This function is similar to @code{sc-no-header} except that any blank
648 line after the @code{mail-header-separator} line will be removed.
650 @item sc-header-on-said
651 @findex sc-header-on-said
652 @findex header-on-said (sc-)
653 @code{>>>>> On @var{date}, @var{from} said:}
655 @item sc-header-inarticle-writes
656 @findex sc-header-inarticle-writes
657 @findex header-inarticle-writes (sc-)
658 @code{>>>>> In article @var{message-id}, @var{from} writes:}
660 @item sc-header-regarding-adds
661 @findex sc-header-regarding-adds
662 @findex header-regarding-adds (sc-)
663 @code{>>>>> Regarding @var{subject}; @var{from} adds:}
665 @item sc-header-attributed-writes
666 @findex sc-header-attributed-writes
667 @findex header-attributed-writes (sc-)
668 @code{>>>>> "@var{sc-attribution}" == @var{sc-author} <@var{sc-reply-address}> writes:}
670 @item sc-header-author-writes
671 @findex sc-header-author-writes
672 @findex header-author-writes (sc-)
673 @code{>>>>> @var{sc-author} writes:}
675 @item sc-header-verbose
676 @findex sc-header-verbose
677 @findex header-verbose (sc-)
678 @code{>>>>> On @var{date},}@*
679 @code{>>>>> @var{sc-author}}@*
680 @code{>>>>> from the organization of @var{organization}}@*
681 @code{>>>>> who can be reached at:@: @var{sc-reply-address}}@*
682 @code{>>>>> (whose comments are cited below with:@: "@var{sc-cite}")}@*
683 @code{>>>>> had this to say in article @var{message-id}}@*
684 @code{>>>>> in newsgroups @var{newsgroups}}@*
685 @code{>>>>> concerning the subject of @var{subject}}@*
686 @code{>>>>> see @var{references} for more details}
689 @node Electric References, Hints to MUA Authors, The Built-in Header Rewrite Functions, Reference Headers
690 @comment node-name, next, previous, up
691 @cindex electric references
692 @section Electric References
696 By default, when Supercite cites the original message for the first
697 time, it just goes ahead and inserts the reference header indexed by
698 @code{sc-preferred-header-style}. However, you may want to select
699 different reference headers based on the type of reply or forwarding you
700 are doing. You may also want to preview the reference header before
701 deciding whether to insert it into the reply buffer or not. Supercite
702 provides an optional @dfn{electric reference} mode which you can drop
703 into to give you this functionality.
705 @vindex sc-electric-references-p
706 @vindex electric-references-p (sc-)
707 If the variable @code{sc-electric-references-p} is non-@code{nil},
708 Supercite will bring up an electric reference mode buffer and place you
709 into a recursive edit. The electric reference buffer is read-only, so
710 you cannot directly modify the reference text until you exit electric
711 references and insert the text into the reply buffer. But you can cycle
712 through all the reference header rewrite functions in your
713 @code{sc-rewrite-header-list}.
715 You can also set a new preferred header style, jump to any header, or
716 jump to the preferred header. The header will be shown in the electric
717 reference buffer and the header index and function name will appear in
720 The following commands are available while in electric reference mode
721 (shown here with their default key bindings):
724 @item @code{sc-eref-next} (@kbd{n})
726 @findex eref-next (sc-)
728 @vindex sc-electric-circular-p
729 @vindex electric-circular-p (sc-)
730 Displays the next reference header in the electric reference buffer. If
731 the variable @code{sc-electric-circular-p} is non-@code{nil}, invoking
732 @code{sc-eref-next} while viewing the last reference header in the list
733 will wrap around to the first header.@refill
735 @item @code{sc-eref-prev} (@kbd{p})
737 @findex eref-prev (sc-)
739 Displays the previous reference header in the electric reference buffer.
740 If the variable @code{sc-electric-circular-p} is non-@code{nil},
741 invoking @code{sc-eref-prev} will wrap around to the last header.@refill
743 @item @code{sc-eref-goto} (@kbd{g})
745 @findex eref-goto (sc-)
747 Goes to a specified reference header. The index (into the
748 @code{sc-rewrite-header-list}) can be specified as a numeric argument to
749 the command. Otherwise, Supercite will query you for the index in the
752 @item @code{sc-eref-jump} (@kbd{j})
754 @findex eref-jump (sc-)
756 Display the preferred reference header, i.e., the one indexed by the current
757 value of @code{sc-preferred-header-style}.
759 @item @code{sc-eref-setn} (@kbd{s})
761 @findex eref-setn (sc-)
763 Set the preferred reference header (i.e.,
764 @code{sc-preferred-header-style}) to the currently displayed header.@refill
766 @item @code{sc-eref-exit} (@kbd{C-j}, @key{RET}, and @key{ESC C-c})
771 @findex eref-exit (sc-)
772 Exit from electric reference mode and insert the current header into the
775 @item @code{sc-eref-abort} (@kbd{q}, @kbd{x})
776 @findex sc-eref-abort
777 @findex eref-abort (sc-)
779 Exit from electric reference mode without inserting the current header.
782 @vindex sc-electric-mode-hook
783 @vindex electric-mode-hook (sc-)
785 Supercite will execute the hook @code{sc-electric-mode-hook} before
786 entering electric reference mode.
788 @node Getting Connected, Emacs 19 MUAs, Recognizing Citations, Top
789 @comment node-name, next, previous, up
790 @cindex citation interface specification
791 @chapter Getting Connected
795 Hitting @kbd{C-c C-y} in your MUA's reply buffer yanks and cites the
796 original message into the reply buffer. In reality, the citation of the
797 original message is performed via a call through a configurable hook
798 variable. The name of this variable has been agreed to in advance as
799 part of the @dfn{citation interface specification}. By default this
800 hook variable has a @code{nil} value, which the MUA recognizes to mean,
801 ``use your default citation function.'' When you add Supercite's
802 citation function to the hook, thereby giving the variable a
803 non-@code{nil} value, it tells the MUA to run the hook via
804 @code{run-hooks} instead of using the default citation.@refill
810 * MH-E with any Emacsen::
811 * VM with any Emacsen::
812 * GNEWS with any Emacsen::
813 * Overloading for Non-conforming MUAs::
817 Early in Supercite's development, the Supercite author, a few MUA
818 authors, and some early Supercite users got together and agreed upon a
819 standard interface between MUAs and citation packages (of which
820 Supercite is currently the only known add-on @t{:-)}. With the recent
821 release of the Free Software Foundation's GNU Emacs 19, the interface
822 has undergone some modification and it is possible that not all MUAs
823 support the new interface yet. Some support only the old interface and
824 some do not support the interface at all. Still, it is possible for all
825 known MUAs to use Supercite, and the following sections will outline the
826 procedures you need to follow.
828 To learn exactly how to connect Supercite to the software systems you
829 are using, read the appropriate following sections. For details on the
830 interface specifications, or if you are writing or maintaining an MUA,
831 @pxref{Hints to MUA Authors}.
835 @findex sc-cite-original
836 @findex cite-original (sc-)
837 @findex sc-submit-bug-report
838 @findex submit-bug-report (sc-)
839 The first thing that everyone should do, regardless of the MUA you are
840 using is to set up Emacs so it will load Supercite at the appropriate
841 time. You can either dump Supercite into your Emacs binary (ask your
842 local Emacs guru how to do this if you don't know), or you can set up an
843 @dfn{autoload} for Supercite. To do the latter, put the following in
844 your @file{.emacs} file:
847 (autoload 'sc-cite-original "supercite" "Supercite 3.1" t)
848 (autoload 'sc-submit-bug-report "supercite" "Supercite 3.1" t)
853 The function @code{sc-cite-original} is the top-level Supercite function
854 designed to be run from the citation hook. It expects
855 @samp{point} and @samp{mark} to be set around the region to cite, and it
856 expects the original article's mail headers to be present within this
857 region. Note that Supercite @emph{never} touches any text outside this
858 region. Note further that for Emacs 19, the region need not be active
859 for @code{sc-cite-original} to do its job.
860 @xref{Hints to MUA Authors}.@refill
862 The other step in the getting connected process is to make sure your
863 MUA calls @code{sc-cite-original} at the right time. As mentioned
864 above, some MUAs handle this differently. Read the sections that follow
865 pertaining to the MUAs you are using.
868 @vindex load-hook (sc-)
870 @vindex pre-hook (sc-)
871 One final note. After Supercite is loaded into your Emacs session, it
872 runs the hook @code{sc-load-hook}. You can put any customizations into
873 this hook since it is only run once. This will not work, however, if
874 your Emacs maintainer has put Supercite into your dumped Emacs' image.
875 In that case, you can use the @code{sc-pre-hook} variable, but this will
876 get executed every time @code{sc-cite-original} is called. @xref{Reply
877 Buffer Initialization}.@refill
879 @node Emacs 19 MUAs, Emacs 18 MUAs, Getting Connected, Getting Connected
880 @comment node-name, next, previous, up
881 @vindex mail-citation-hook
883 @section GNUS, RMAIL, or RNEWS with any Emacs 19
887 These MUAs, distributed with Emacs and with Lucid Emacs, use Emacs's
888 built-in yanking facility, which provides the citing hook variable
889 @code{mail-citation-hook}. By default, this hook's value is @code{nil},
890 but by adding the following to your @file{.emacs} file, you can tell
891 these MUAs to use Supercite to perform the citing of the original
895 (add-hook 'mail-citation-hook 'sc-cite-original)
898 GNUS users may also want to add the following bit of lisp as well. This
899 prevents GNUS from inserting its default attribution header. Otherwise,
900 both GNUS and Supercite will insert an attribution header:
903 (setq news-reply-header-hook nil)
906 @node Emacs 18 MUAs, MH-E with any Emacsen, Emacs 19 MUAs, Getting Connected
907 @comment node-name, next, previous, up
908 @vindex mail-citation-hook
911 @cindex sendmail.el file
912 @section GNUS, RMAIL, PCMAIL, RNEWS with Emacs 18 or Epoch 4
916 These MUAs use Emacs' built-in yanking and citing routines, contained in
917 the @file{sendmail.el} file. @file{sendmail.el} for Emacs 18, and its
918 derivative Epoch 4, do not know anything about the citation interface
919 required by Supercite. To connect Supercite to any of these MUAs under
920 Emacs 18 or Epoch 4, you should first
921 @pxref{Overloading for Non-conforming MUAs}. Then follow the directions
922 for using these MUAs under Emacs 19.
923 @xref{Emacs 19 MUAs}.@refill
925 @cindex add-hook substitute
926 @cindex setq as a substitute for add-hook
929 @cindex sc-unsupp.el file
930 Note that those instructions will tell you to use the function
931 @code{add-hook}. This function is new with Emacs 19 and you will not
932 have it by default if you are running Emacs 18 or Epoch 4. You can
933 either substitute the appropriate call to @code{setq}, or you can use
934 the @code{add-hook} function that is provided in the @file{sc-unsupp.el}
935 file of unsupported Supercite hacks and ideas. Or you can upgrade to
936 some Emacs 19 variant! @t{:-)}@refill
938 To use @code{setq} instead of @code{add-hook}, you would, for example,
942 (add-hook 'mail-citation-hook 'sc-cite-original)
948 (setq mail-citation-hook 'sc-cite-original)
951 Note the lack of of a single quote on the first argument to @code{setq}.
953 @node MH-E with any Emacsen, VM with any Emacsen, Emacs 18 MUAs, Getting Connected
954 @comment node-name, next, previous, up
956 @vindex mh-yank-hooks
958 @cindex mail-citation-hook
959 @section MH-E with any Emacsen
963 MH-E 4.x conforms to the @code{mail-citation-hook} interface supported
964 by other MUAs. At the time of this writing, MH-E 4.0 has not been
965 released, but if you have it, put this in your @file{.emacs} file to
966 connect Supercite and MH-E 4.x:
969 (add-hook 'mail-citation-hook 'sc-cite-original)
972 Note that if you are using Emacs 18 or Epoch 4, you will not have the
973 @code{add-hook} function. @xref{Emacs 18 MUAs}, for details on how to
974 proceed without @code{add-hook}.
976 MH-E version 3.x uses a slightly different interface than other MUAs.
977 MH-E provides a hook variable @code{mh-yank-hooks}, but it doesn't act
978 like a hook, and doing an @code{add-hook} will not work.
980 To connect Supercite to MH-E 3.x, you should instead add the following
981 to your @code{.emacs} file:
984 (add-hook 'mh-yank-hooks 'sc-cite-original)
987 @vindex mh-yank-from-start-of-msg
988 You also need to make sure that MH-E includes all the original mail
989 headers in the yanked message. The variable that controls this is
990 @code{mh-yank-from-start-of-msg}. By default, this variable has the
991 value @code{t}, which tells MH-E to include all the mail headers when
992 yanking the original message. Before you switched to using Supercite,
993 you may have set this variable to other values so as not to include the
994 mail headers in the yanked message. Since Supercite requires these
995 headers (and cleans them out for you), you need to make sure the value
996 is @code{t}. This lisp, in your @file{.emacs} file will do the trick:
999 (setq mh-yank-from-start-of-msg t)
1002 Note that versions of MH-E before 3.7 did not provide the
1003 @code{mh-yank-hooks} variable. Your only option is to upgrade to MH-E
1004 version 3.7 or later.
1006 @node VM with any Emacsen, GNEWS with any Emacsen, MH-E with any Emacsen, Getting Connected
1007 @comment node-name, next, previous, up
1009 @vindex mail-citation-hook
1010 @vindex mail-yank-hooks
1011 @section VM with any Emacsen
1015 Since release 4.40, VM has supported the citation interface required by
1016 Supercite. But since the interface has changed recently the details of
1017 getting connected differ with the version of VM you are using.
1019 If you are running any release of VM after 4.40, you can add the
1020 following to your @file{.emacs} to connect Supercite with VM:
1023 (add-hook 'mail-yank-hooks 'sc-cite-original)
1026 Note that if you are using Emacs 18 or Epoch 4, you will not have the
1027 @code{add-hook} function. @xref{Emacs 18 MUAs}, for details on how to
1028 proceed without @code{add-hook}.
1030 Since version 5.34, VM has supported the newer @code{mail-citation-hook}
1031 interface, but @code{mail-yank-hooks} is still being supported for
1032 backward compatibility. If you are running a newer version of VM and
1033 you want to maintain consistency with other MUAs, use this bit of code
1037 (add-hook 'mail-citation-hook 'sc-cite-original)
1040 @node GNEWS with any Emacsen, Overloading for Non-conforming MUAs, VM with any Emacsen, Getting Connected
1041 @comment node-name, next, previous, up@cindex .emacs file
1042 @vindex news-reply-mode-hook
1043 @findex sc-perform-overloads
1044 @findex perform-overloads (sc-)
1045 @vindex gnews-ready-hook
1046 @section GNEWS with any Emacsen
1050 As far as I know, no version of GNEWS supports the citation interface
1051 required by Supercite. To connect Supercite with GNEWS, please first
1052 @pxref{Overloading for Non-conforming MUAs}.
1054 After you have followed the directions in that section. You should add
1055 the following lisp code to your @file{.emacs} file:
1058 (add-hook 'mail-citation-hook 'sc-cite-original)
1061 Note that if you are using Emacs 18 or Epoch 4, you will not have the
1062 @code{add-hook} function. @xref{Emacs 18 MUAs}, for details on how to
1063 proceed without @code{add-hook}.
1065 @node Overloading for Non-conforming MUAs, Replying and Yanking, GNEWS with any Emacsen, Getting Connected
1066 @comment node-name, next, previous, up
1068 @cindex sc-oloads.el
1069 @vindex mail-citation-hook
1070 @findex sc-perform-overloads
1072 @section Overloading for Non-conforming MUAs
1076 As mentioned elsewhere, some MUAs do not provide the necessary hooks to
1077 connect with Supercite. Supercite version 3.1 provides an unsupported
1078 mechanism, called @dfn{overloading} which redefines certain key
1079 functions in the MUA, so that it will call the @code{mail-citation-hook}
1080 variable instead of the MUA's default hard-coded citing routines. Since
1081 most newer versions of the known MUAs support the
1082 @code{mail-citation-hook} variable, it is recommended that you upgrade
1083 if at all possible. But if you can't upgrade, at least you're not out
1084 of luck! Once you set up overloading properly, you should follow the
1085 directions for connecting Supercite to the Emacs 19 MUAs.
1086 @xref{Emacs 19 MUAs}.@refill
1089 @vindex hyperb:version
1090 Users of Bob Weiner's Hyperbole package take note. Hyperbole provides
1091 the necessary overloads (and a whole lot more!) and you can potentially
1092 clobber it if you were to load Supercite's overloading after
1093 Hyperbole's. For this reason, Supercite will @emph{not} perform any
1094 overloading if it finds the variable @code{hyperb:version} is
1095 @code{boundp} (i.e. it exists because Hyperbole has been loaded into
1096 your Emacs session). If this is the case, Supercite will display a
1097 warning message in the minibuffer. You should consult the Hyperbole
1098 manual for further details.
1100 Overloading involves the re-definition of the citing function with the
1101 new, @code{mail-citation-hook} savvy version. The function in
1102 @file{sc-oloads.el} that does this is @code{sc-perform-overloads}. This
1103 function is smart enough to only overload the MUA functions when it is
1104 absolutely necessary, based on the version numbers it can figure out.
1105 Also, @code{sc-perform-overloads} will only install the new functions
1106 once. It is also smart enough to do nothing if the MUA is not yet
1109 The tricky part is finding the right time and place to perform the
1110 overloading. It must be done after the MUA has been loaded into your
1111 Emacs session, but before the first time you try to yank in a message.
1112 Fortunately, this has been figured out for you.
1114 If you must overload, you should put the following lisp code in your
1115 @file{.emacs} file, to make sure the @file{sc-oloads.el} file gets
1116 loaded at the right time:
1119 (autoload 'sc-perform-overloads "sc-oloads" "Supercite 3.1" t)
1122 Then you must make sure that the function @code{sc-perform-overloads}
1123 gets run at the right time. For GNUS, put this in your @file{.emacs}
1127 (setq news-reply-mode-hook 'sc-perform-overloads)
1128 (setq mail-setup-hook 'sc-perform-overloads)
1131 If you are using RNEWS, put this in your @file{.emacs} file:
1133 @vindex news-reply-mode-hook
1135 (setq news-reply-mode-hook 'sc-perform-overloads)
1138 If you are using RMAIL or PCMAIL, put this in your @file{.emacs} file:
1141 (setq mail-setup-hook 'sc-perform-overloads)
1144 If you are using GNEWS, put this in your @file{.emacs} file:
1147 (setq news-reply-mode-hook 'sc-perform-overloads)
1148 (setq gnews-ready-hook 'sc-perform-overloads)
1151 Now go back and follow the directions for getting the Emacs 19 MUAs
1152 connected to Supercite. Be sure to @pxref{Emacs 18 MUAs} on substitutes
1153 for Emacs 19's @code{add-hook} function.@refill
1155 @node Replying and Yanking, Reply Buffer Initialization, Overloading for Non-conforming MUAs, Top
1156 @comment node-name, next, previous, up
1157 @chapter Replying and Yanking
1160 This chapter explains what happens when you reply and yank an original
1161 message from an MUA.
1164 * Reply Buffer Initialization::
1165 * Filling Cited Text::
1168 @node Reply Buffer Initialization, Filling Cited Text, Replying and Yanking, Replying and Yanking
1169 @comment node-name, next, previous, up
1170 @findex sc-cite-original
1171 @findex cite-original (sc-)
1173 @section Reply Buffer Initialization
1177 Executing @code{sc-cite-original} performs the following steps as it
1178 initializes the reply buffer:
1183 @vindex pre-hook (sc-)
1184 @emph{Runs @code{sc-pre-hook}.}
1185 This hook variable is run before @code{sc-cite-original} does any other
1186 work. You could conceivably use this hook to set certain Supercite
1187 variables based on the reply buffer's mode or name (i.e., to do
1188 something different based on whether you are replying or following up to
1192 @emph{Inserts Supercite's keymap.}
1193 @vindex sc-mode-map-prefix
1194 @vindex mode-map-prefix (sc-)
1196 @cindex keymap prefix
1197 Supercite provides a number of commands for performing post-yank
1198 modifications to the reply buffer. These commands are installed on
1199 Supercite's top-level keymap. Since Supercite has to interface with a
1200 wide variety of MUAs, it does not install all of its commands directly
1201 into the reply buffer's keymap. Instead, it puts its commands on a
1202 keymap prefix, then installs this prefix onto the buffer's keymap. What
1203 this means is that you typically have to type more characters to invoke
1204 a Supercite command, but Supercite's key bindings can be made much more
1205 consistent across MUAs.
1207 You can control what key Supercite uses as its keymap prefix by changing
1208 the variable @code{sc-mode-map-prefix}. By default, this variable is
1209 set to @code{C-c C-p}; a finger twister perhaps, but unfortunately the
1210 best default due to the scarcity of available key bindings in many MUAs.
1213 @emph{Turns on Supercite minor mode.}
1215 The modeline of the reply buffer should indicate that Supercite is
1216 active in that buffer by displaying the string @samp{SC}.
1219 @emph{Sets the ``Undo Boundary.''}
1220 @cindex undo boundary
1221 Supercite sets an undo boundary before it begins to modify the original
1222 yanked text. This allows you to easily undo Supercite's changes to
1223 affect alternative citing styles.
1226 @emph{Processes the mail headers.}
1227 @vindex sc-confirm-always-p
1228 @vindex confirm-always-p (sc-)
1229 @vindex sc-mail-warn-if-non-rfc822-p
1230 @vindex mail-warn-if-non-rfc822-p (sc-)
1231 All previously retrieved info key-value pairs are deleted from the info
1232 alist, then the mail headers in the body of the yanked message are
1233 scanned. Info key-value pairs are created for each header found. Also,
1234 such useful information as the author's name and email address are
1235 extracted. If the variable @code{sc-mail-warn-if-non-rfc822-p} is
1236 non-@code{nil}, then Supercite will warn you if it finds a mail header
1237 that does not conform to RFC822. This is rare and indicates a problem
1238 either with your MUA or the original author's MUA, or some MTA (mail
1239 transport agent) along the way.
1241 @vindex sc-nuke-mail-headers
1242 @vindex sc-nuke-mail-header-list
1243 @vindex nuke-mail-headers (sc-)
1244 @vindex nuke-mail-header-list (sc-)
1245 Once the info keys have been extracted from the mail headers, the
1246 headers are nuked from the reply buffer. You can control exactly which
1247 headers are removed or kept, but by default, all headers are removed.
1249 There are two variables which control mail header nuking. The variable
1250 @code{sc-nuke-mail-headers} controls the overall behavior of the header
1251 nuking routines. By setting this variable to @code{'all}, you
1252 automatically nuke all mail headers. Likewise, setting this variable to
1253 @code{'none} inhibits nuking of any mail headers. In between these
1254 extremes, you can tell Supercite to nuke only a specified list of mail
1255 headers by setting this variable to @code{'specified}, or to keep only a
1256 specified list of headers by setting it to @code{'keep}.
1258 If @code{sc-nuke-mail-headers} is set to @code{'specified} or
1259 @code{'keep}, then the variable @code{sc-nuke-mail-header-list} is
1260 consulted for the list of headers to nuke or keep. This variable
1261 contains a list of regular expressions. If the mail header line matches
1262 a regular expression in this list, the header will be nuked or kept.
1263 The line is matched against the regexp using @code{looking-at} rooted at
1264 the beginning of the line.
1266 @vindex sc-blank-lines-after-headers
1267 @vindex blank-lines-after-headers (sc-)
1268 If the variable @code{sc-blank-lines-after-headers} is non-@code{nil},
1269 it contains the number of blank lines remaining in the buffer after mail
1270 headers are nuked. By default, only one blank line is left in the buffer.
1273 @emph{Selects the attribution and citation strings.}
1274 Once the mail headers have been processed, Supercite selects a
1275 attribution string and a citation string which it will use to cite the
1276 original message. @xref{Selecting an Attribution}, for details.
1279 @emph{Cites the message body.}
1280 @vindex sc-cite-region-limit
1281 @vindex cite-region-limit (sc-)b
1282 After the selection of the attribution and citation strings, Supercite
1283 cites the original message by inserting the citation string prefix in
1284 front of every uncited line. You may not want Supercite to
1285 automatically cite very long messages however. For example, some email
1286 could contain a smaller header section followed by a huge uuencoded
1287 message. It wouldn't make sense to cite the uuencoded message part when
1288 responding to the original author's short preface. For this reason,
1289 Supercite provides a variable which limits the automatic citation of
1290 long messages to a certain maximum number of lines. The variable is
1291 called @code{sc-cite-region-limit}. If this variable contains an
1292 integer, messages with more lines that this will not be cited at all,
1293 and a warning message will be displayed. Supercite has performed
1294 everything necessary, though, for you to manually cite only the small
1295 portion of the original message that you want to use.
1297 If @code{sc-cite-region-limit} contains a non-@code{nil} value, the
1298 original message will always be cited, regardless of its size. If the
1299 variable contains the value @code{nil}, the region will never be cited
1300 automatically. Use this if you always want to be able to edit and cite
1301 the message manually.
1303 @vindex sc-cite-blank-lines-p
1304 @vindex cite-blank-lines-p (sc-)
1305 The variable @code{sc-cite-blank-lines-p} controls whether blank lines
1306 in the original message should be cited or not. If this variable is
1307 non-@code{nil}, blank lines will be cited just like non-blank lines.
1308 Otherwise, blank lines will be treated as paragraph separators.
1310 Citing of the original message is highly configurable. Supercite's
1311 default setup does a pretty good job of citing many common forms of
1312 previously cited messages. But there are as many citation styles out
1313 there as people on the net, or just about! It would be impossible for
1314 Supercite to anticipate every style in existence, and you probably
1315 wouldn't encounter them all anyway. But you can configure Supercite to
1316 recognize those styles you see often.
1317 @xref{Configuring the Citation Engine}, for details.@refill
1320 @emph{Runs @code{sc-post-hook}.}
1321 @vindex sc-post-hook
1322 @vindex post-hook (sc-)
1323 This variable is very similar to @code{sc-pre-hook}, except that it runs
1324 after @code{sc-cite-original} is finished. This hook is provided mostly
1325 for completeness and backward compatibility. Perhaps it could be used to
1326 reset certain variables set in @code{sc-pre-hook}.@refill
1329 @node Filling Cited Text, Selecting an Attribution, Reply Buffer Initialization, Replying and Yanking
1330 @comment node-name, next, previous, up
1331 @cindex filling paragraphs
1332 @vindex sc-auto-fill-region-p
1333 @vindex auto-fill-region-p (sc-)
1336 @findex sc-setup-filladapt
1337 @findex setup-filladapt (sc-)
1338 @vindex sc-load-hook
1339 @vindex load-hook (sc-)
1340 @section Filling Cited Text
1344 Supercite will automatically fill newly cited text from the original
1345 message unless the variable @code{sc-auto-fill-region-p} has a
1346 @code{nil} value. Supercite will also re-fill paragraphs when you
1347 manually cite or re-cite text.
1349 However, during normal editing, Supercite itself cannot be used to fill
1350 paragraphs. This is a change from version 2. There are other add-on
1351 lisp packages which do filling much better than Supercite ever did. The
1352 two best known are @dfn{filladapt} and @dfn{gin-mode}. Both work well
1353 with Supercite and both are available at the normal Emacs Lisp archive
1354 sites. @dfn{gin-mode} works pretty well out of the box, but if you use
1355 @dfn{filladapt}, you may want to run the function
1356 @code{sc-setup-filladapt} from your @code{sc-load-hook}. This simply
1357 makes @dfn{filladapt} a little more Supercite savvy than its default
1360 @vindex sc-fixup-whitespace-p
1361 @vindex fixup-whitespace-p (sc-)
1362 Also, Supercite will collapse leading whitespace between the citation
1363 string and the text on a line when the variable
1364 @code{sc-fixup-whitespace-p} is non-@code{nil}. The default value for
1365 this variable is @code{nil}.@refill
1368 Its important to understand that Supercite's automatic filling (during
1369 the initial citation of the reply) is very fragile. That is because
1370 figuring out the @code{fill-prefix} for a particular paragraph is a
1371 really hard thing to do automatically. This is especially the case when
1372 the original message contains code or some other text where leading
1373 whitespace is important to preserve. For this reason, many Supercite
1374 users typically run with @code{sc-auto-fill-region-p} (and possibly also
1375 @code{sc-fixup-whitespace-p}) set to @code{nil}. They then manually
1376 fill each cited paragraph in the reply buffer.
1378 I usually run with both these variables containing their default values.
1379 When Supercite's automatic filling breaks on a particular message, I
1380 will use Emacs' undo feature to undo back before the citation was
1381 applied to the original message. Then I'll toggle the variables and
1382 manually cite those paragraphs that I don't want to fill or collapse
1383 whitespace on. @xref{Variable Toggling Shortcuts}.@refill
1386 If you find that Supercite's automatic filling is just too fragile for
1387 your tastes, you might consider one of these alternate approaches.
1388 Also, to make life easier, a shortcut function to toggle the state of
1389 both of these variables is provided on the key binding
1390 @kbd{C-c C-p C-p} (with the default value of @code{sc-mode-map-prefix};
1391 @pxref{Post-yank Formatting Commands}).@refill
1393 You will noticed that the minor mode string will
1394 show the state of these variables as qualifier characters. When both
1395 variables are @code{nil}, the Supercite minor mode string will display
1396 @samp{SC}. When just @code{sc-auto-fill-region-p} is non-@code{nil}, the
1397 string will display @samp{SC:f}, and when just
1398 @code{sc-fixup-whitespace-p} is non-@code{nil}, the string will display
1399 @samp{SC:w}. When both variables are non-@code{nil}, the string will
1400 display @samp{SC:fw}. Note that the qualifiers chosen are mnemonics for
1401 the default bindings of the toggling function for each respective
1403 @xref{Variable Toggling Shortcuts}.@refill
1405 Why are these variables not set to @code{nil} by default? It is because
1406 many users won't manually fill paragraphs that are Supercited, and there
1407 have been widespread complaints on the net about mail and news messages
1408 containing lines greater than about 72 characters. So the default is to
1411 @node Selecting an Attribution, Attribution Preferences, Filling Cited Text, Top
1412 @comment node-name, next, previous, up
1413 @cindex attribution list
1414 @vindex sc-preferred-attribution-list
1415 @vindex preferred-attribution-list (sc-)
1417 @chapter Selecting an Attribution
1421 As you know, the attribution string is the part of the author's name
1422 that will be used to composed a non-nested citation string. Supercite
1423 scans the various mail headers present in the original article and uses
1424 a number of heuristics to extract strings which it puts into the
1425 @dfn{attribution association list} or @dfn{attribution alist}. This is
1426 analogous, but different than, the info alist previously mentioned. Each
1427 element in the attribution alist is a key-value pair containing such
1428 information as the author's first name, middle names, and last name, the
1429 author's initials, and the author's email terminus.
1433 * Attribution Preferences::
1434 * Anonymous Attributions::
1439 @node Attribution Preferences, Anonymous Attributions, Selecting an Attribution, Selecting an Attribution
1440 @comment node-name, next, previous, up
1441 @section Attribution Preferences
1445 When you cite an original message, you can tell Supercite which part of
1446 the author's name you would prefer it to use as the attribution. The
1447 variable @code{sc-preferred-attribution-list} controls this; it contains
1448 keys which are matched against the attribution alist in the given order.
1449 The first value of a key that produces a non-@code{nil}, non-empty
1450 string match is used as the attribution string, and if no keys match, a
1451 secondary mechanism is used to generate the attribution.
1452 @xref{Anonymous Attributions}.
1454 The following preferences are always available in the attribution alist
1459 the author's email terminus.
1462 the author's initials.
1465 the author's first name.
1468 the author's last name.
1470 @item "middlename-1"
1471 the author's first middle name.
1473 @item "sc-lastchoice"
1474 the last attribution string you have selected. This is useful when you
1475 recite paragraphs in the reply.@refill
1478 @vindex sc-attrib-selection-list
1479 @vindex attrib-selection-list (sc-)
1480 consults the customizable list @code{sc-attrib-selection-list} which can
1481 be used to select special attributions based on the value of any info
1482 key. See below for details.
1484 @item "x-attribution"
1485 the original author's suggestion for attribution string choice. See below
1489 Middle name indexes can be any positive integer greater than zero,
1490 though it is unlikely that many authors will have more than one middle
1493 At this point, let me digress into a discussion of etiquette. It is my
1494 belief that while the style of the citations is a reflection of the
1495 personal tastes of the replier (i.e., you), the attribution selection is
1496 ultimately the personal choice of the original author. In a sense it is
1497 his or her ``net nickname'', and therefore the author should have some
1498 say in the selection of attribution string. Imagine how you would feel
1499 if someone gave you a nickname that you didn't like?
1501 For this reason, Supercite recognizes a special mail header,
1502 @samp{X-Attribution:}, which if present, tells Supercite the attribution
1503 string preferred by the original author. It is the value of this header
1504 that is associated with the @code{"x-attribution"} key in the
1505 attribution alist. Currently, you can override the preference of this
1506 key by changing @code{sc-preferred-attribution-list}, but that isn't
1507 polite, and in the future Supercite may hard-code this. For now, it is
1508 suggested that if you change the order of the keys in this list, that
1509 @code{"x-attribution"} always be first, or possible second behind only
1510 @code{"sc-lastchoice"}. This latter is the default.
1512 @vindex sc-attrib-selection-list
1513 @vindex attrib-selection-list (sc-)
1514 The value @code{"sc-consult"} in @code{sc-preferred-attribution-list}
1515 has a special meaning during attribution selection. When Supercite
1516 encounters this preference, it begins processing a customizable list of
1517 attributions, contained in the variable @code{sc-attrib-selection-list}.
1518 Each element in this list contains lists of the following form:
1522 (@var{infokey} ((@var{regexp} @. @var{attribution})
1523 (@var{regexp} @. @var{attribution})
1529 @findex sc-mail-field
1530 @findex mail-field (sc-)
1531 where @var{infokey} is a key for @code{sc-mail-field} and @var{regexp}
1532 is a regular expression to match against the @var{infokey}'s value. If
1533 @var{regexp} matches the @var{infokey}'s value, the @var{attribution} is
1534 used as the attribution string. Actually, @var{attribution} can be a
1535 string or a list; if it is a list, it is @code{eval}uated and the return
1536 value (which must be a string), is used as the attribution.
1538 This can be very useful for when you are replying to net acquaintances
1539 who do not use the @samp{X-Attribution:@:} mail header. You may know
1540 what nickname they would prefer to use, and you can set up this list to
1541 match against a specific mail field, e.g., @samp{From:@:}, allowing you
1542 to cite your friend's message with the appropriate attribution.
1544 @node Anonymous Attributions, Author Names, Attribution Preferences, Selecting an Attribution
1545 @comment node-name, next, previous, up
1546 @vindex sc-default-author-name
1547 @vindex default-author-name (sc-)
1548 @vindex sc-default-attribution
1549 @vindex default-attribution (sc-)
1551 @section Anonymous Attributions
1555 When the author's name cannot be found in the @samp{From:@:} mail
1556 header, a fallback author name and attribution string must be supplied.
1557 The fallback author name is contained in the variable
1558 @code{sc-default-author-name} and the fallback attribution string is
1559 contained in the variable @code{sc-default-attribution}. Default values
1560 for these variables are @code{"Anonymous"} and @code{"Anon"},
1561 respectively. Note that in most circumstances, getting the default
1562 author name or attribution is a sign that something is set up
1565 @vindex sc-use-only-preference-p
1566 @vindex use-only-preference-p (sc-)
1567 Also, if the preferred attribution, which you specified in your
1568 @code{sc-preferred-attribution-alist} variable cannot be found, a
1569 secondary method can be employed to find a valid attribution string. The
1570 variable @code{sc-use-only-preference-p} controls what happens in this
1571 case. If the variable's value is non-@code{nil}, then
1572 @code{sc-default-author-name} and @code{sc-default-attribution} are
1573 used, otherwise, the following steps are taken to find a valid
1574 attribution string, and the first step to return a non-@code{nil},
1575 non-empty string becomes the attribution:@refill
1579 Use the last selected attribution, if there is one.
1582 Use the value of the @code{"x-attribution"} key.
1585 Use the author's first name.
1588 Use the author's last name.
1591 Use the author's initials.
1594 Find the first non-@code{nil}, non-empty attribution string in the
1598 @code{sc-default-attribution} is used.
1601 @vindex sc-confirm-always-p
1602 @vindex confirm-always-p (sc-)
1603 Once the attribution string has been automatically selected, a number of
1604 things can happen. If the variable @code{sc-confirm-always-p} is
1605 non-@code{nil}, you are queried for confirmation of the chosen
1606 attribution string. The possible values for completion are those strings
1607 in the attribution alist, however you are not limited to these choices.
1608 You can type any arbitrary string at the confirmation prompt. The string
1609 you enter becomes the value associated with the @code{"sc-lastchoice"}
1610 key in the attribution alist.
1612 @vindex sc-downcase-p
1613 @vindex downcase-p (sc-)
1614 Once an attribution string has been selected, Supercite will force the
1615 string to lower case if the variable @code{sc-downcase-p} is
1618 @vindex sc-attribs-preselect-hook
1619 @vindex attribs-preselect-hook (sc-)
1620 @vindex sc-attribs-postselect-hook
1621 @vindex attribs-postselect-hook (sc-)
1623 Two hook variables provide even greater control of the attribution
1624 selection process. The hook @code{sc-attribs-preselect-hook} is run
1625 before any attribution is selected. Likewise, the hook
1626 @code{sc-attribs-postselect-hook} is run after the attribution is
1627 selected (and the corresponding citation string is built), but before
1628 these values are committed for use by Supercite. During the
1629 post-selection hook, the local variables @code{attribution} and
1630 @code{citation} are bound to the appropriate strings. By changing these
1631 variables in your hook functions, you change the attribution and
1632 citation strings used by Supercite. One possible use of this would be
1633 to override any automatically derived attribution string when it is only
1634 one character long; e.g. you prefer to use @code{"initials"} but the
1635 author only has one name.@refill
1637 @node Author Names, Configuring the Citation Engine, Anonymous Attributions, Selecting an Attribution
1638 @comment node-name, next, previous, up
1639 @cindex author names
1640 @section Author Names
1644 Supercite employs a number of heuristics to decipher the author's name
1645 based on value of the @samp{From:@:} mail field of the original message.
1646 Supercite can recognize almost all of the common @samp{From:@:} field
1647 formats in use. If you encounter a @samp{From:@:} field that Supercite
1648 cannot parse, please report this bug.
1649 @xref{The Supercite Mailing List}.@refill
1651 @vindex sc-titlecue-regexp
1652 @vindex titlecue-regexp (sc-)
1653 There are a number of Supercite variables that control how author names
1654 are extracted from the @samp{From:@:} header. Some headers may contain a
1655 descriptive title as in:
1658 From:@: computer!speedy!doe (John Xavier-Doe -- Decent Hacker)
1661 Supercite knows which part of the @samp{From:@:} header is email address
1662 and which part is author name, but in this case the string @code{"Decent
1663 Hacker"} is not part of the author's name. You can tell Supercite to
1664 ignore the title, while still recognizing hyphenated names through the
1665 use of a regular expression in the variable @code{sc-titlecue-regexp}.
1666 This variable has the default value of @code{"\\\\s +-+\\\\s +"}. Any
1667 text after this regexp is encountered is ignored as noise.
1669 @vindex sc-name-filter-alist
1670 @vindex name-filter-alist (sc-)
1671 Some @samp{From:@:} headers may contain extra titles in the name fields
1672 not separated by a title cue, but which are nonetheless not part of the
1673 author's name proper. Examples include the titles ``Dr.'', ``Mr.'',
1674 ``Ms.'', ``Jr.'', ``Sr.'', and ``III'' (e.g., Thurston Howe, the Third).
1675 Also, some companies prepend or append the name of the division,
1676 organization, or project on the author's name. All of these titles are
1677 noise which should be ignored. The variable @code{sc-name-filter-alist}
1678 is used for this purpose. As implied by its name, this variable is an
1679 association list, where each element is a cons cell of the form:
1682 (@var{regexp} @. @var{position})
1686 where @var{regexp} is a regular expression that is matched (using
1687 @code{string-match}) against each element of the @samp{From:@:} field's
1688 author name. @var{position} is a position indicator, starting at zero.
1689 Thus to strip out all titles of ``Dr.'', ``Mr.'', etc. from the name,
1690 @code{sc-name-filter-alist} would have an entry such as:
1693 ("^\\(Mr\\|Mrs\\|Ms\\|Dr\\)[.]?$" @. 0)
1697 which only removes them if they appear as the first word in the name.
1698 The position indicator is an integer, or one of the two special symbols
1699 @code{last} or @code{any}. @code{last} always matches against the last
1700 word in the name field, while @code{any} matches against every word in
1703 @node Configuring the Citation Engine, Using Regi, Author Names, Top
1704 @comment node-name, next, previous, up
1706 @cindex frames (Regi)
1707 @cindex entries (Regi)
1708 @chapter Configuring the Citation Engine
1712 At the heart of Supercite is a regular expression interpreting engine
1713 called @dfn{Regi}. Regi operates by interpreting a data structure
1714 called a Regi-frame (or just @dfn{frame}), which is a list of
1715 Regi-entries (or just @dfn{entry}). Each entry contains a predicate,
1716 typically a regular expression, which is matched against a line of text
1717 in the current buffer. If the predicate matches true, an associated
1718 expression is @code{eval}uated. In this way, an entire region of text
1719 can be transformed in an @emph{awk}-like manner. Regi is used
1720 throughout Supercite, from mail header information extraction, to header
1721 nuking, to citing text.
1726 * Frames You Can Customize::
1730 While the details of Regi are discussed below (@pxref{Using Regi}), only
1731 those who wish to customize certain aspects of Supercite need concern
1732 themselves with it. It is important to understand though, that any
1733 conceivable citation style that can be described by a regular expression
1734 can be recognized by Supercite. This leads to some interesting
1735 applications. For example, if you regularly receive email from a
1736 co-worker that uses an uncommon citation style (say one that employs a
1737 @samp{|} or @samp{@}} character at the front of the line), it is
1738 possible for Supercite to recognize this and @emph{coerce} the citation
1739 to your preferred style, for consistency. In theory, it is possible for
1740 Supercite to recognize such things as uuencoded messages or C code and
1741 cite or fill those differently than normal text. None of this is
1742 currently part of Supercite, but contributions are welcome!
1744 @node Using Regi, Frames You Can Customize, Configuring the Citation Engine, Configuring the Citation Engine
1745 @comment node-name, next, previous, up
1746 @findex regi-interpret
1753 Regi works by interpreting frames with the function
1754 @code{regi-interpret}. A frame is a list of arbitrary size where each
1755 element is a entry of the following form:
1758 (@var{pred} @var{func} [@var{negate-p} [@var{case-fold-search}]])
1761 Regi starts with the first entry in a frame, evaluating the @var{pred}
1762 of that entry against the beginning of the line that @samp{point} is on.
1763 If the @var{pred} evaluates to true (or false if the optional
1764 @var{negate-p} is non-@code{nil}), then the @var{func} for that entry is
1765 @code{eval}uated. How processing continues is determined by the return
1766 value for @var{func}, and is described below. If @var{pred} was false
1767 the next entry in the frame is checked until all entries have been
1768 matched against the current line. If no entry matches, @samp{point} is
1769 moved forward one line and the frame is reset to the first entry.
1771 @var{pred} can be a string, a variable, a list or one of the following
1772 symbols: @code{t}, @code{begin}, @code{end}, or @code{every}. If
1773 @var{pred} is a string, or a variable or list that @code{eval}uates to a
1774 string, it is interpreted as a regular expression. This regexp is
1775 matched against the current line, from the beginning, using
1776 @code{looking-at}. This match folds case if the optional
1777 @var{case-fold-search} is non-@code{nil}. If @var{pred} is not a
1778 string, or does not @code{eval}uate to a string, it is interpreted as a
1779 binary value (@code{nil} or non-@code{nil}).@refill
1781 The four special symbol values for @var{pred} are recognized:
1785 Always produces a true outcome.
1787 Always executed before the frame is interpreted. This can be used to
1788 initialize some global variables for example.
1790 Always executed after frame interpreting is completed. This can be used
1791 to perform any necessary post-processing.
1793 Executes whenever the frame is reset, usually after the entire frame has
1794 been matched against the current line.
1797 Note that @var{negate-p} and @var{case-fold-search} are ignored if
1798 @var{pred} is one of these special symbols. Only the first occurrence of
1799 each symbol in a frame is used; any duplicates are ignored. Also
1800 note that for performance reasons, the entries associated with these
1801 symbols are removed from the frame during the main interpreting loop.
1803 Your @var{func} can return certain values which control continued Regi
1804 processing. By default, if your @var{func} returns @code{nil} (as it
1805 should be careful to do explicitly), Regi will reset the frame to the
1806 first entry, and advance @samp{point} to the beginning of the next line.
1807 If a list is returned from your function, it can contain any combination
1808 of the following elements:@refill
1811 @item the symbol @code{continue}
1812 This tells Regi to continue processing entries after a match, instead of
1813 resetting the frame and moving @samp{point}. In this way, lines of text
1814 can have multiple matches, but you have to be careful to avoid entering
1817 @item the symbol @code{abort}
1818 This tells Regi to terminate frame processing. However, any @code{end}
1819 entry is still processed.
1821 @item the list @code{(frame . @var{newframe})}
1822 This tells Regi to substitute @var{newframe} as the frame it is
1823 interpreting. In other words, your @var{func} can modify the Regi frame
1824 on the fly. @var{newframe} can be a variable containing a frame, or it
1825 can be the frame in-lined.@refill
1827 @item the list @code{(step . @var{step})}
1828 Tells Regi to move @var{step} number of lines forward as it continues
1829 processing. By default, Regi moves forward one line. @var{step} can be
1830 zero or negative of course, but watch out for infinite loops.@refill
1833 During execution of your @var{func}, the following variables will be
1834 temporarily bound to some useful information:@refill
1838 The current line in the buffer that Regi is @code{looking-at}, as a string.
1840 The current frame being interpreted.
1842 The current frame entry being interpreted.
1845 @node Frames You Can Customize, Post-yank Formatting Commands, Using Regi, Configuring the Citation Engine
1846 @comment node-name, next, previous, up
1847 @vindex sc-nuke-mail-header
1848 @section Frames You Can Customize
1852 As mentioned earlier, Supercite uses various frames to perform
1853 certain jobs such as mail header information extraction and mail header
1854 nuking. However, these frames are not available for you to customize,
1855 except through abstract interfaces such as @code{sc-nuke-mail-header},
1858 @vindex sc-default-cite-frame
1859 However, the citation frames Supercite uses provide a lot of customizing
1860 power and are thus available to you to change to suit your needs. The
1861 workhorse of citation is the frame contained in the variable
1862 @code{sc-default-cite-frame}. This frame recognizes many situations,
1863 such as blank lines, which it interprets as paragraph separators. It
1864 also recognizes previously cited nested and non-nested citations in the
1865 original message. By default it will coerce non-nested citations into
1866 your preferred citation style, and it will add a level of citation to
1867 nested citations. It will also simply cite uncited lines in your
1872 @vindex sc-default-uncite-frame
1873 @vindex sc-default-recite-frame
1874 In a similar vein, there are default frames for @dfn{unciting} and
1875 @dfn{reciting}, contained in the variables
1876 @code{sc-default-uncite-frame} and @code{sc-default-recite-frame}
1877 respectively.@refill
1879 As mentioned earlier (@pxref{Recognizing Citations}), citations are
1880 recognized through the values of the regular expressions
1881 @code{sc-citation-root-regexp}, et al. To recognize odd styles, you
1882 could modify these variables, or you could modify the default citing
1883 frame. Alternatively, you could set up association lists of frames for
1884 recognizing specific alternative forms.
1886 @vindex sc-cite-frame-alist
1887 @vindex sc-uncite-frame-alist
1888 @vindex sc-recite-frame-alist
1889 For each of the actions -- citing, unciting, and reciting -- an alist is
1890 consulted to find the frame to use (@code{sc-cite-frame-alist},
1891 @code{sc-uncite-frame-alist}, and @code{sc-recite-frame-alist}
1892 respectively). These frames can contain alists of the form:
1895 ((@var{infokey} (@var{regexp} @. @var{frame}) (@var{regexp} @. @var{frame}) @dots{})
1896 (@var{infokey} (@var{regexp} @. @var{frame}) (@var{regexp} @. @var{frame}) @dots{})
1900 @vindex sc-mail-field
1901 @findex string-match
1902 Where @var{infokey} is a key suitable for @code{sc-mail-field},
1903 @var{regexp} is a regular expression which is @code{string-match}'d
1904 against the value of the @code{sc-mail-field} key, and @var{frame} is
1905 the frame to use if a match occurred. @var{frame} can be a variable
1906 containing a frame or a frame in-lined.@refill
1908 When Supercite is about to cite, uncite, or recite a region, it consults
1909 the appropriate alist and attempts to find a frame to use. If one
1910 is not found from the alist, then the appropriate default frame is used.
1912 @node Post-yank Formatting Commands, Citing Commands, Frames You Can Customize, Top
1913 @comment node-name, next, previous, up
1914 @vindex sc-mode-map-prefix
1915 @vindex mode-map-prefix (sc-)
1917 @chapter Post-yank Formatting Commands
1921 Once the original message has been yanked into the reply buffer, and
1922 @code{sc-cite-original} has had a chance to do its thing, a number of
1923 useful Supercite commands will be available to you. Since there is wide
1924 variety in the keymaps that MUAs set up in their reply buffers, it is
1925 next to impossible for Supercite to properly sprinkle its commands into
1926 the existing keymap. For this reason Supercite places its commands on a
1927 separate keymap, putting this keymap onto a prefix key in the reply
1928 buffer. You can customize the prefix key Supercite uses by changing the
1929 variable @code{sc-mode-map-prefix}. By default, the
1930 @code{sc-mode-map-prefix} is @kbd{C-c C-p}; granted, not a great choice,
1931 but unfortunately the best general solution so far. In the rest of this
1932 chapter, we'll assume you've installed Supercite's keymap on the default
1938 * Insertion Commands::
1939 * Variable Toggling Shortcuts::
1940 * Mail Field Commands::
1941 * Miscellaneous Commands::
1945 @node Citing Commands, Insertion Commands, Post-yank Formatting Commands, Post-yank Formatting Commands
1946 @comment node-name, next, previous, up
1947 @vindex sc-cite-region-limit
1948 @section Commands to Manually Cite, Recite, and Uncite
1952 Probably the three most common post-yank formatting operations that you
1953 will perform will be the manual citing, reciting, and unciting of
1954 regions of text in the reply buffer. Often you may want to recite a
1955 paragraph to use a nickname, or manually cite a message when setting
1956 @code{sc-cite-region-limit} to @code{nil}. The following commands
1957 perform these functions on the region of text between @samp{point} and
1958 @samp{mark}. Each of them sets the @dfn{undo boundary} before modifying
1959 the region so that the command can be undone in the standard Emacs
1962 A quick note about Emacs 19. Unlike in Emacs 18, the region delimited
1963 by @samp{point} and @samp{mark} can have two states. It can be
1964 @dfn{active} or @dfn{inactive}. Although Emacs 19 and Lucid Emacs 19
1965 use different terminology and functions, both employ the same convention
1966 such that when the region is inactive, commands that modify the region
1967 should generate an error. The user needs to explicitly activate the
1968 region before successfully executing the command. All Supercite
1969 commands conform to this convention.
1971 Here is the list of Supercite citing commands:
1974 @findex sc-cite-region
1975 @findex cite-region (sc-)
1977 @vindex sc-pre-cite-hook
1978 @vindex pre-cite-hook (sc-)
1979 @vindex sc-confirm-always-p
1980 @vindex confirm-always-p
1982 @item @code{sc-cite-region} (@kbd{C-c C-p c})
1984 This command cites each line in the region of text by interpreting the
1985 selected frame from @code{sc-cite-frame-alist}, or the default citing
1986 frame @code{sc-default-cite-frame}. It runs the hook
1987 @code{sc-pre-cite-hook} before interpreting the frame. With an optional
1988 universal argument (@kbd{C-u}), it temporarily sets
1989 @code{sc-confirm-always-p} to @code{t} so you can confirm the
1990 attribution string for a single manual citing.
1991 @xref{Configuring the Citation Engine}.@refill
1993 @findex sc-uncite-region
1994 @findex uncite-region (sc-)
1996 @item @code{sc-uncite-region} (@kbd{C-c C-p u})
1998 This command removes any citation strings from the beginning of each
1999 cited line in the region by interpreting the selected frame from
2000 @code{sc-uncite-frame-alist}, or the default unciting frame
2001 @code{sc-default-uncite-frame}. It runs the hook
2002 @code{sc-pre-uncite-hook} before interpreting the frame.
2003 @xref{Configuring the Citation Engine}.@refill
2005 @findex sc-recite-region
2006 @findex recite-region (sc-)
2008 @item @code{sc-recite-region} (@kbd{C-c C-p r})
2010 This command recites each line the region by interpreting the selected
2011 frame from @code{sc-recite-frame-alist}, or the default reciting frame
2012 @code{sc-default-recite-frame}. It runs the hook
2013 @code{sc-pre-recite-hook} before interpreting the frame.
2014 @xref{Configuring the Citation Engine}.@refill
2016 @vindex sc-confirm-always-p
2017 @vindex confirm-always-p (sc-)
2018 Supercite will always ask you to confirm the attribution when reciting a
2019 region, regardless of the value of @code{sc-confirm-always-p}.
2022 @node Insertion Commands, Variable Toggling Shortcuts, Citing Commands, Post-yank Formatting Commands
2023 @comment node-name, next, previous, up
2024 @section Insertion Commands
2028 These two functions insert various strings into the reply buffer.
2031 @findex sc-insert-reference
2032 @findex insert-reference (sc-)
2034 @item @code{sc-insert-reference} (@kbd{C-c C-p w})
2036 @vindex sc-preferred-header-style
2037 @vindex preferred-header-style (sc-)
2038 Inserts a reference header into the reply buffer at @samp{point}. With
2039 no arguments, the header indexed by @code{sc-preferred-header-style} is
2040 inserted. An optional numeric argument is the index into
2041 @code{sc-rewrite-header-list} indicating which reference header to
2044 With just the universal argument (@kbd{C-u}), electric reference mode is
2045 entered, regardless of the value of @code{sc-electric-references-p}.
2047 @findex sc-insert-citation
2048 @findex insert-citation (sc-)
2050 @item @code{sc-insert-citation} (@kbd{C-c C-p i})
2052 Inserts the current citation string at the beginning of the line that
2053 @samp{point} is on. If the line is already cited, Supercite will issue
2054 an error and will not cite the line.
2057 @node Variable Toggling Shortcuts, Mail Field Commands, Insertion Commands, Post-yank Formatting Commands
2058 @comment node-name, next, previous, up
2059 @cindex toggling variables
2060 @section Variable Toggling Shortcuts
2064 Supercite defines a number of commands that make it easier for you to
2065 toggle and set various Supercite variables as you are editing the reply
2066 buffer. For example, you may want to turn off filling or whitespace
2067 cleanup, but only temporarily. These toggling shortcut commands make
2071 Like Supercite commands in general, the toggling commands are placed on
2072 a keymap prefix within the greater Supercite keymap. For the default
2073 value of @code{sc-mode-map-prefix}, this will be
2074 @kbd{C-c C-p C-t}.@refill
2076 The following commands toggle the value of certain Supercite variables
2077 which take only a binary value:
2081 Toggles the variable @code{sc-mail-nuke-blank-lines-p}.
2084 Toggles the variable @code{sc-confirm-always-p}.
2087 Toggles the variable @code{sc-downcase-p}.
2090 Toggles the variable @code{sc-electric-references-p}.
2093 Toggles the variable @code{sc-auto-fill-region-p}.
2096 Toggles the variable @code{sc-electric-circular-p}.
2099 Toggles the variable @code{sc-nested-citation-p}.
2102 Toggles the variable @code{sc-use-only-preferences-p}.
2105 Toggles the variable @code{sc-fixup-whitespace-p}.
2108 @findex set-variable
2109 The following commands let you set the value of multi-value variables,
2110 in the same way that Emacs' @code{set-variable} does:
2114 Sets the value of the variable @code{sc-preferred-attribution-list}.
2117 Sets the value of the variable @code{sc-cite-region-limit}.
2120 Sets the value of the variable @code{sc-mail-nuke-mail-headers}.
2123 Sets the value of the variable @code{sc-mail-header-nuke-list}.
2126 Sets the value of the variable @code{sc-preferred-header-style}.
2130 One special command is provided to toggle both
2131 @code{sc-auto-fill-region-p} and @code{sc-fixup-whitespace-p} together.
2132 This is because you typically want to run Supercite with either variable
2133 as @code{nil} or non-@code{nil}. The command to toggle these variables
2134 together is bound on @kbd{C-c C-p C-p}.@refill
2136 Finally, the command @kbd{C-c C-p C-t h} (also @kbd{C-c C-p C-t ?})
2137 brings up a Help message on the toggling keymap.
2140 @node Mail Field Commands, Miscellaneous Commands, Variable Toggling Shortcuts, Post-yank Formatting Commands
2141 @comment node-name, next, previous, up
2142 @section Mail Field Commands
2146 These commands allow you to view, modify, add, and delete various bits
2147 of information from the info alist.
2148 @xref{Information Keys and the Info Alist}.@refill
2152 @findex sc-mail-field-query
2153 @findex mail-field-query (sc-)
2155 @item @code{sc-mail-field-query} (@kbd{C-c C-p f})
2157 Allows you to interactively view, modify, add, and delete info alist
2158 key-value pairs. With no argument, you are prompted (with completion)
2159 for a info key. The value associated with that key is displayed in the
2160 minibuffer. With an argument, this command will first ask if you want
2161 to view, modify, add, or delete an info key. Viewing is identical to
2162 running the command with no arguments.
2164 If you want to modify the value of a key, Supercite will first prompt
2165 you (with completion) for the key of the value you want to change. It
2166 will then put you in the minibuffer with the key's current value so you
2167 can edit the value as you wish. When you hit @key{RET}, the key's value
2168 is changed. For those of you running Emacs 19, minibuffer history is
2169 kept for the values.
2171 If you choose to delete a key-value pair, Supercite will prompt you (with
2172 completion) for the key to delete.
2174 If you choose to add a new key-value pair, Supercite firsts prompts you
2175 for the key to add. Note that completion is turned on for this prompt,
2176 but you can type any key name here, even one that does not yet exist.
2177 After entering the key, Supercite prompts you for the key's value. It
2178 is not an error to enter a key that already exists, but the new value
2179 will override any old value. It will not replace it though; if you
2180 subsequently delete the key-value pair, the old value will reappear.
2182 @findex sc-mail-process-headers
2183 @findex mail-process-headers (sc-)
2185 @item @code{sc-mail-process-headers} (@kbd{C-c C-p g})
2187 This command lets you re-initialize Supercite's info alist from any set
2188 of mail headers in the region between @samp{point} and @samp{mark}.
2189 This function is especially useful for replying to digest messages where
2190 Supercite will initially set up its information for the digest
2191 originator, but you want to cite each component article with the real
2192 message author. Note that unless an error during processing occurs, any
2193 old information is lost.@refill
2196 @node Miscellaneous Commands, Information Keys and the Info Alist, Mail Field Commands, Post-yank Formatting Commands
2197 @comment node-name, next, previous, up
2198 @section Miscellaneous Commands
2203 @findex sc-open-line
2204 @findex open-line (sc-)
2207 @item @code{sc-open-line} (@kbd{C-c C-p o})
2209 Similar to Emacs' standard @code{open-line} commands, but inserts the
2210 citation string in front of the new line. As with @code{open-line},
2211 an optional numeric argument inserts that many new lines.@refill
2214 @findex describe (sc-)
2217 @item @code{sc-describe} (@kbd{C-c C-p h} and @kbd{C-c C-p ?})
2219 This function has been obsoleted by the @TeX{}info manual you are now
2220 reading. It is still provided for compatibility, but it will eventually
2224 @findex version (sc-)
2226 @item @code{sc-version} (@kbd{C-c C-p v})
2228 Echos the version of Supercite you are using. With the optional
2229 universal argument (@kbd{C-u}), this command inserts the version
2230 information into the current buffer.
2232 @findex sc-submit-bug-report
2233 @findex submit-bug-report (sc-)
2235 @item @code{sc-submit-bug-report} (@kbd{C-c C-p C-b})
2237 If you encounter a bug, or wish to suggest an enhancement, use this
2238 command to set up an outgoing mail buffer, with the proper address to
2239 the Supercite maintainer automatically inserted in the @samp{To:@:}
2240 field. This command also inserts information that the Supercite
2241 maintainer can use to recreate your exact setup, making it easier to
2245 @node Hints to MUA Authors, Version 3 Changes, Electric References, Top
2246 @comment node-name, next, previous, up
2247 @chapter Hints to MUA Authors
2251 In June of 1989, some discussion was held between the various MUA
2252 authors, the Supercite author, and other Supercite users. These
2253 discussions centered around the need for a standard interface between
2254 MUAs and Supercite (or any future Supercite-like packages). This
2255 interface was formally proposed by Martin Neitzel on Fri, 23 Jun 89, in
2256 a mail message to the Supercite mailing list:
2259 Martin> Each news/mail-reader should provide a form of
2260 Martin> mail-yank-original that
2262 Martin> 1: inserts the original message incl. header into the
2263 Martin> reply buffer; no indentation/prefixing is done, the header
2264 Martin> tends to be a "full blown" version rather than to be
2265 Martin> stripped down.
2267 Martin> 2: `point' is at the start of the header, `mark' at the
2268 Martin> end of the message body.
2270 Martin> 3: (run-hooks 'mail-yank-hooks)
2272 Martin> [Supercite] should be run as such a hook and merely
2273 Martin> rewrite the message. This way it isn't anymore
2274 Martin> [Supercite]'s job to gather the original from obscure
2275 Martin> sources. [@dots{}]
2278 @vindex mail-citation-hook
2279 @vindex mail-yank-hooks
2281 @findex mail-yank-original
2283 This specification was adopted, but with the recent release of
2284 Emacs 19, it has undergone a slight modification. Instead of the
2285 variable @code{mail-yank-hooks}, the new preferred hook variable that
2286 the MUA should provide is @code{mail-citation-hook}.
2287 @code{mail-yank-hooks} can be provided for backward compatibility, but
2288 @code{mail-citation-hook} should always take precedence. Richard
2289 Stallman (of the FSF) suggests that the MUAs should @code{defvar}
2290 @code{mail-citation-hook} to @code{nil} and perform some default citing
2291 when that is the case. Take a look at Emacs 19's @file{sendmail.el}
2292 file, specifically the @code{mail-yank-original} defun for
2295 If you are writing a new MUA package, or maintaining an existing MUA
2296 package, you should make it conform to this interface so that your users
2297 will be able to link Supercite easily and seamlessly. To do this, when
2298 setting up a reply or forward buffer, your MUA should follow these
2303 Insert the original message, including the mail headers into the reply
2304 buffer. At this point you should not modify the raw text in any way, and
2305 you should place all the original headers into the body of the reply.
2306 This means that many of the mail headers will be duplicated, one copy
2307 above the @code{mail-header-separator} line and one copy below,
2308 however there will probably be more headers below this line.@refill
2311 Set @samp{point} to the beginning of the line containing the first mail
2312 header in the body of the reply. Set @samp{mark} at the end of the
2313 message text. It is very important that the region be set around the
2314 text Supercite is to modify and that the mail headers are within this
2315 region. Supercite will not venture outside the region for any reason,
2316 and anything within the region is fair game, so don't put anything that
2317 @strong{must} remain unchanged inside the region. Further note that for
2318 Emacs 19, the region need not be set active. Supercite will work
2319 properly when the region is inactive, as should any other like-minded
2323 Run the hook @code{mail-citation-hook}. You will probably want to
2324 provide some kind of default citation functions in cases where the user
2325 does not have Supercite installed. By default, your MUA should
2326 @code{defvar} @code{mail-citation-hook} to @code{nil}, and in your
2327 yanking function, check its value. If it finds
2328 @code{mail-citation-hook} to be @code{nil}, it should perform some
2329 default citing behavior. User who want to connect to Supercite then
2330 need only add @code{sc-cite-original} to this list of hooks using
2331 @code{add-hook}.@refill
2334 If you do all this, your users will not need to overload your routines
2335 to use Supercite, and your MUA will join the ranks of those that conform
2336 to this interface ``out of the box.''
2338 @node Version 3 Changes, Thanks and History, Hints to MUA Authors, Top
2339 @comment node-name, next, previous, up
2340 @chapter Version 3 Changes
2344 @cindex sc-unsupp.el file
2345 With version 3, Supercite has undergone an almost complete rewrite, and
2346 has hopefully benefited in a number of ways, including vast
2347 improvements in the speed of performance, a big reduction in size of the
2348 code and in the use of Emacs resources, and a much cleaner and flexible
2349 internal architecture. The central construct of the info alist, and its
2350 role in Supercite has been expanded, and the other central concept, the
2351 general package Regi, was developed to provide a theoretically unlimited
2354 But most of this work is internal and not of very great importance to the
2355 casual user. There have been some changes at the user-visible level,
2356 but for the most part, the Supercite configuration variables from
2357 version 2 should still be relevant to version 3. Below, I briefly
2358 outline those user-visible things that have changed since version 2. For
2359 details, look to other sections of this manual.
2363 @cindex supercite.el file
2364 @cindex reporter.el file
2365 @cindex regi.el file
2366 @cindex sc.el from version 2
2367 @cindex sc-elec.el from version 2
2368 Supercite proper now comes in a single file, @file{supercite.el}, which
2369 contains everything except the unsupported noodlings, overloading (which
2370 should be more or less obsolete with the release of Emacs 19), and the
2371 general lisp packages @file{reporter.el} and @file{regi.el}. Finally,
2372 the @TeX{}info manual comes in its own file as well. In particular, the
2373 file @file{sc.el} from the version 2 distribution is obsolete, as is the
2374 file @file{sc-elec.el}.
2377 @code{sc-spacify-name-chars} is gone in version 3.
2380 @vindex sc-attrib-selection-list
2381 @vindex attrib-selection-list
2382 @code{sc-nickname-alist} is gone in version 3. The
2383 @code{sc-attrib-selection-list} is a more general construct supporting
2384 the same basic feature.
2387 The version 2 variable @code{sc-preferred-attribution} has been changed
2388 to @code{sc-preferred-attribution-list}, and has been expanded upon to
2389 allow you to specify an ordered list of preferred attributions.
2392 @code{sc-mail-fields-list} has been removed, and header nuking in
2393 general has been greatly improved, giving you wider flexibility in
2394 specifying which headers to keep and remove while presenting a
2395 simplified interface to commonly chosen defaults.
2398 Post-yank paragraph filling has been completely removed from Supercite,
2399 other packages just do it better than Supercite ever would. Supercite
2400 will still fill newly cited paragraphs.
2403 @vindex sc-cite-region-limit
2404 @vindex cite-region-limit
2405 The variable @code{sc-all-but-cite-p} has been replaced by
2406 @code{sc-cite-region-limit}.
2409 Keymap hacking in the reply buffer has been greatly simplified, with, I
2410 believe, little reduction in functionality.
2413 Hacking of the reply buffer's docstring has been completely eliminated.
2416 @node Thanks and History, The Supercite Mailing List, Version 3 Changes, Top
2417 @comment node-name, next, previous, up
2418 @chapter Thanks and History
2422 The Supercite package was derived from its predecessor Superyank 1.11
2423 which was inspired by various bits of code and ideas from Martin Neitzel
2424 and Ashwin Ram. They were the folks who came up with the idea of
2425 non-nested citations and implemented some rough code to provide this
2426 style. Superyank and Supercite version 2 evolved to the point where much
2427 of the attribution selection mechanism was automatic, and features have
2428 been continuously added through the comments and suggestions of the
2429 Supercite mailing list participants. Supercite version 3 represents a
2430 nearly complete rewrite with many of the algorithms and coding styles
2431 being vastly improved. Hopefully Supercite version 3 is faster,
2432 smaller, and much more flexible than its predecessors.
2434 In the version 2 manual I thanked some specific people for their help in
2435 developing Supercite 2. You folks know who you are and your continued
2436 support is greatly appreciated. I wish to thank everyone on the
2437 Supercite mailing list, especially the brave alpha testers, who helped
2438 considerably in testing out the concepts and implementation of Supercite
2439 version 3. Special thanks go out to the MUA and Emacs authors Kyle
2440 Jones, Stephen Gildea, Richard Stallman, and Jamie Zawinski for coming
2441 to a quick agreement on the new @code{mail-citation-hook} interface, and
2442 for adding the magic lisp to their code to support this.
2444 All who have helped and contributed have been greatly appreciated.
2446 @node The Supercite Mailing List, Concept Index, Thanks and History, Top
2447 @comment node-name, next, previous, up
2448 @cindex supercite mailing list address
2449 @cindex mailing list address
2450 @chapter The Supercite Mailing List
2454 The author runs a simple mail expanding mailing list for discussion of
2455 issues related to Supercite. This includes enhancement requests, bug
2456 reports, general help questions, etc. To subscribe or unsubscribe to
2457 the mailing list, send a request to the administrative address:
2460 supercite-request@@python.org
2463 Please be sure to include the most reliable and shortest (preferably
2464 Internet) address back to you. To post articles to the list, send your
2465 message to this address (you do not need to be a member to post, but be
2466 sure to indicate this in your article or replies may not be CC'd to
2470 supercite@@python.org
2473 If you are sending bug reports, they should go to the following address,
2474 but @emph{please}! use the command @code{sc-submit-bug-report} since it
2475 will be much easier for me to duplicate your problem if you do so. It
2476 will set up a mail buffer automatically with this address on the
2480 supercite-help@@python.org
2483 @node Concept Index, Command Index, The Supercite Mailing List, Top
2484 @comment node-name, next, previous, up
2485 @unnumbered Concept Index
2488 @node Command Index, Key Index, Concept Index, Top
2489 @comment node-name, next, previous, up
2490 @unnumbered Command Index
2494 Since all supercite commands are prepended with the string
2495 ``@code{sc-}'', each appears under its @code{sc-}@var{command} name and
2496 its @var{command} name.
2502 @node Key Index, Variable Index, Command Index, Top
2503 @comment node-name, next, previous, up
2504 @unnumbered Key Index
2507 @node Variable Index, , Key Index, Top
2508 @comment node-name, next, previous, up
2509 @unnumbered Variable Index
2513 Since all supercite variables are prepended with the string
2514 ``@code{sc-}'', each appears under its @code{sc-}@var{variable} name and
2515 its @var{variable} name.
2520 @setchapternewpage odd
2526 arch-tag: 0521847a-4680-44b6-ae6e-13ce20e18436