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