version 0.90_01
[sepia.git] / sepia.texi
blobba5dcbfc0d6b81e01d4e796ef97a35429d8eabb3
1 \input texinfo   @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename sepia.info
4 @settitle Simple Emacs Perl Integration
5 @dircategory Emacs
6 @direntry
7 * Sepia: (sepia).    Simple Emacs Perl Integration.
8 @end direntry
9 @c %**end of header
11 @titlepage
12 @title Sepia: Simple Emacs Perl Integration
13 @author Sean O'Rourke
14 @end titlepage
16 @macro kbinding{key,cmd}
17 @item \key\ `\cmd\'
18 @kindex \key\
19 @end macro
21 @macro fitem{name}
22 @item \name\
23 @findex \name\
24 @end macro
26 @macro xxx{stuff}
27 @b{XXX: \stuff\}
28 @end macro
30 @node Top, Introduction, (dir), (dir)
32 @ifinfo
33 @top SEPIA
34 @end ifinfo
36 Sepia is a set of Perl development tools for Emacs supporting code
37 navigation and interactive evaluation.
39 @menu
40 * Introduction::                
41 * Editing::                     
42 * Interactive Perl::            
43 * Customization::               
44 * Internals::                   
45 * Credits::                     
46 * Function Index::              
47 @end menu
49 @c ============================================================
50 @node Introduction, Editing, Top, Top
51 @chapter Introduction
53 Sepia is a set of tools for Perl development in Emacs.  Its goal is to
54 extend CPerl mode to support fast code navigation and interactive
55 development.  It is inspired by Emacs' current support for a number of
56 other languages, including Lisp, Python, and Emacs Lisp.
58 @menu
59 * Getting Started::             
60 * Philosophy::                  
61 @end menu
63 @node Getting Started, Philosophy, Introduction, Introduction
64 @section Getting Started
66 To install Sepia, its Emacs Lisp files must be in Emacs'
67 @code{load-path}, and the @file{lib} directory must be in Perl's
68 @code{@@INC}.  Assuming that Sepia has been unpacked in
69 @file{~/sepia}, it can be installed by adding the following lines to
70 @file{~/.emacs}:
72 @example
73 (add-to-list 'load-path "~/sepia")
74 (setq sepia-perl5lib (list (expand-file-name "~/sepia/lib")))
75 (defalias 'perl-mode 'sepia-mode)
76 (require 'sepia)
77 @end example
79 Then to bring up the interactive Perl prompt, type @kbd{M-x sepia-repl}.
81 @node Philosophy,  , Getting Started, Introduction
82 @section Philosophy
84 A development environment should support three activities: code
85 spelunking, interaction, and customization.  Emacs as an environment for
86 developing Emacs Lisp thoroughly supports all of them: It has commands
87 to visit individual functions' code and documentation, commands to
88 evaluate or step through expressions, and an architecture that
89 encourages customization in Emacs Lisp.  As an environment for Perl,
90 however, it is lacking: there is limited interactivity with the Perl
91 debugger, and reasonable documentation browsing, but no support for
92 navigating, editing, and re-evaluating code.  Sepia attempts to remedy
93 the situation.
95 Modern IDEs also support these three activities, but do so awkwardly.
96 Rather than having functions to visit definitions (@kbd{find-function})
97 and search for functions (@kbd{apropos}), they clutter the screen with
98 class and file trees.  Rather than supporting interactive evaluation of
99 small pieces of code, they perform background semantic checking on whole
100 projects and highlight errors.  Rather than allowing minor
101 customizations to grow organically into features, they support limited
102 configuration files and baroque plug-in APIs.  Sepia tries to adhere to
103 the apparent Emacs philosophy that rich semantic information should be
104 unobtrusive, and that the best way to build working code is to start
105 by experimenting with small pieces.
107 Language support packages for Emacs vary widely in the degree to which
108 they make use of or replace existing Emacs features.  Minimal modes
109 provide keyword-based syntax highlighting and an unadorned comint buffer
110 as an interpreter.  Others provide their own specialized equivalents of
111 comint, eldoc, completion, and other Emacs features.  Sepia takes a
112 third approach by trying to do as much as possible with existing Emacs
113 features, even when they are not optimal for Perl.  For example, it uses
114 comint to communicate with the subprocess, eldoc to display
115 documentation, and grep to list source locations.
117 This approach has three advantages: First, it maximizes the number of
118 features that can be supported with limited development time.  Second,
119 it respects users' settings.  A seasoned Emacs user may have changed
120 hundreds of settings, so a mode that reimplements features will have to
121 support equivalent settings, and will force the user to re-specify them.
122 Finally, this approach respects decades of development spent, as Neal
123 Stephenson put it, ``focused with maniacal intensity on the deceptively
124 simple-seeming problem of editing text.''  Many non-obvious choices go
125 into making a polished interface, and while a reimplementation gets rid
126 of accumulated cruft, it must rediscover these hidden trade-offs.
128 Anyways, I hope you enjoy using Sepia.  Its development style is strange
129 for someone used Perl's typical mix of one-liners and edit-save-run, but
130 once you are accustomed to it, you may find it very effective.
132 @c ============================================================
133 @node Editing, Interactive Perl, Introduction, Top
134 @chapter Editing
135 @findex sepia-mode
137 Sepia's first contribution is a set of commands to explore a Perl
138 codebase.  These include commands to browse and display documentation,
139 to find function definitions, and to query a cross-reference database of
140 function and variable uses.  Sepia also provides intelligent symbol
141 completion.
143 @menu
144 * Completion::                  
145 * Navigation::                  
146 * Documentation::               
147 @end menu
149 @node Completion, Navigation, Editing, Editing
150 @section Completion
152 Sepia implements partial-word completion that communicates with the
153 inferior Perl process.  For example, @samp{%S:X:v_u} completes to
154 @samp{%Sepia::Xref::var_use} when Sepia is loaded.  This completion only
155 operates on functions and global variables known to the Perl
156 interpreter, so it works best when code and interpreter are in sync.
158 More precisely, completion examines the text before point and tries each
159 of the following in turn, using the first successful approach:
161 @enumerate
162 @item
163 If the text looks like a method call (e.g. @samp{$object->f} or
164 @samp{Class->f}), complete on methods.
166 @item
167 If it looks like a variable (e.g. @samp{%hash} or @samp{$scalar}),
168 complete on variables.
170 @item
171 Complete on modules and functions.
173 @item
174 Otherwise, complete on Perl built-in operators.
175 @end enumerate
177 For each of the first three cases, completions candidates are first
178 generated by splitting the text on characters @code{[:_]} and matching
179 the resulting word parts.  For example, @samp{X:a_b} will complete to
180 all symbols matching @samp{^X[^:]*:+a[^:_]*_b} such as @samp{Xref::a_bug}
181 and @samp{X::always_bites_me}.  If no matches result, the text is
182 treated as an acronym.  For example, @samp{dry} will complete to
183 @samp{dont_repeat_yourself}.
185 Completion is performed by the following commands:
186 @table @kbd
187 @item M-x sepia-complete-symbol
188 @findex sepia-complete-symbol
189 Complete the symbol before point as described above.  Note that this
190 does not consider lexical scope, and is always case-sensitive,
191 independent of @code{completion-ignore-case}.
193 @item TAB
194 @itemx M-x sepia-indent-or-complete
195 @findex sepia-indent-or-complete
196 First try to reindent the current line.  If its indentation does not
197 change, then try to expand an abbrev at point (unless
198 @code{sepia-indent-expand-abbrev} is @code{nil}).  If no abbrev is
199 expanded, then call @code{sepia-complete-symbol}.
201 @end table
203 @node Navigation, Documentation, Completion, Editing
204 @section Navigation
206 Sepia provides several commands for navigating program source.  All of
207 them rely on information from the inferior Perl process, so it is
208 important both that it be running, and that its internal representation
209 of the program match the program source.  The commands marked (Xref)
210 below also rely on a cross-reference database, which must be explicitly
211 rebuilt by calling @code{xref-rebuild} when the program changes.
213 There are two basic kinds of navigation commands.  The first kind jumps
214 directly to the first matching location when possible, prompting only if
215 no such location is found.  These commands find only a single location.
217 @c direct-jump commands
218 @table @kbd
220 @item M-. M-.
221 @itemx M-x sepia-dwim
222 @findex sepia-dwim
223 Guess what kind of identifier is at point, and try to do the right
224 thing: for a function, find its definition(s); for a variable, find its
225 uses; for a module, view its documentation; otherwise, prompt for the
226 name of a function to visit.  @code{sepia-dwim} automatically goes to
227 the first function definition or variable use found.
229 @item M-. l
230 @itemx M-x sepia-location
231 @findex sepia-location
232 Jump directly to the definition of the function at point, prompting if
233 point is not on a known function.  If multiple definitions are found,
234 choose one arbitrarily.  This function is similar to @code{sepia-defs},
235 and the two should probably be merged.
237 @item M-. j
238 @itemx M-x sepia-jump-to-symbol
239 @findex sepia-jump-to-symbol
240 Navigate to a function using ``ido'' interactive completion.  Within
241 interactive completion, press @key{:} to descend into a package,
242 @key{DEL} to ascend to a parent package, and @key{RET} to go to the
243 currently-selected function.
245 @end table
247 The second kind of navigation commands always prompts the user -- though
248 usually with a sensible default value -- and finds multiple locations.
249 When called with a prefix argument, these commands present their results
250 in a @code{grep-mode} buffer.  When called @emph{without} a prefix
251 argument, they place all results on the found-location ring and jump
252 directly to the first.  The remaining locations can be cycled through by
253 calls to @code{sepia-next}.
255 @c prompt-and-go commands
256 @table @kbd
257 @item M-. f @var{name} @key{RET}
258 @itemx M-x sepia-defs
259 @findex sepia-defs
260 Find definition(s) of function @var{name}.
262 @item M-. m @var{name} @key{RET}
263 @itemx M-x sepia-module-find @var{name} @key{RET}
264 @findex sepia-module-find
265 Find the source of module @var{name}.
267 @item M-. a @var{regexp} @key{RET}
268 @itemx M-x sepia-apropos @var{regexp} @key{RET}
269 @findex sepia-apropos
270 Find definitions of all functions whose names match @var{regexp}.
272 @item M-. c @var{name} @key{RET}
273 @itemx M-x sepia-callers @var{name} @key{RET}
274 @findex sepia-callers
275 (Xref) Find calls to function @var{name}.
277 @item M-. C @var{name} @key{RET}
278 @itemx M-x sepia-callees @var{name} @key{RET}
279 @findex sepia-callees
280 (Xref) Find the definitions of functions called by @var{name}.
282 @item M-. v @var{name} @key{RET}
283 @itemx M-x sepia-var-uses @var{name} @key{RET}
284 @findex sepia-var-uses
285 (Xref) Find uses of the global variable @var{name}.
287 @item M-. V @var{name} @key{RET}
288 @itemx M-x sepia-var-defs @var{name} @key{RET}
289 @findex sepia-var-defs
290 (Xref) Find definitions of global variable @var{name}.  Since Perl's
291 global variables are not declared, this is rarely useful
293 @c XXX: broken, so don't mention it.
294 @c @item M-. A @var{regexp} @key{RET}
295 @c @itemx M-x sepia-var-apropos
296 @c @findex sepia-var-apropos
297 @c Find definitions of all variables whose names match @var{regexp}.  Since
298 @c this function does not handle lexical variables, and since Perl's global
299 @c variables are not declared, this is rarely useful.
301 @end table
303 Finally, there are several other navigation-related commands that do not
304 fit into either of the above categories.
306 @c other commands
307 @table @kbd
308 @item M-,
309 @itemx M-x sepia-next
310 @findex sepia-next
311 Cycle through the definitions found by the previous @key{M-.} search.
313 @item M-. r
314 @itemx M-x sepia-rebuild
315 @findex sepia-rebuild
316 Rebuild the cross-reference database by walking the op-tree and
317 stashes.
319 @item M-. t
320 @itemx M-x find-tag
321 Execute the @code{find-tag} command typically bound to @key{M-.}.
323 @end table
325 @node Documentation,  , Navigation, Editing
326 @section Documentation
328 Sepia can be used to browse installed modules' documentation, to format
329 and display the current buffer's POD, and to browse the list of modules
330 installed on the system.
332 @table @kbd
333 @item M-. d @var{name} @key{RET}
334 @itemx M-x sepia-perldoc-this
335 @findex sepia-perldoc-this
336 View documentation for module @var{name} or Perl manual page @var{name}.
338 @item C-c C-d
339 @itemx M-x sepia-view-pod
340 @findex sepia-view-pod
341 Format and view the current buffer's documentation.
343 @item sepia-package-list
344 @findex sepia-package-list
345 Browse a tree of installed packages.  This lists only the top-level
346 packages from installed distributions, so if package @code{My::Stuff}
347 also provides @code{My::Stuff::Details}, it will not be displayed.  When
348 Emacs-w3m is available, each module is linked to its documentation.
350 @item sepia-module-list
351 @findex sepia-module-list
352 Browse a tree of both top-level and internal packages, like
353 @code{sepia-package-list}.
355 @end table
357 @findex sepia-install-eldoc
358 Sepia also integrates with eldoc (at least in GNU Emacs >= 22).
359 Documentation for Perl operators and control structures is taken from
360 CPerl mode.  Sepia will also display documentation for user-defined
361 functions if their POD is formatted in the standard way, with functions
362 described in a ``=head2'' or ``=item'' entry.  To load user
363 documentation, visit the relevant file and type @kbd{M-x
364 sepia-doc-update}.
366 If @code{Module::CoreList} is available, Sepia's eldoc function will
367 also display the first version of Perl with which a module was shipped.
368 This is intended to give the programmer a sense of when he is creating
369 external dependencies.
371 @c ============================================================
372 @node Interactive Perl, Customization, Editing, Top
373 @chapter Interactive Perl
375 @findex sepia-repl
376 Sepia's second main contribution is an interactive interface (REPL) to
377 an inferior Perl process.  The interface is based on GUD mode, and
378 inherits many of its bindings; this chapter discusses only the Sepia
379 extensions.  To start or switch to the repl, type @kbd{M-x sepia-repl}.
380 As in Sepia mode, @key{TAB} in the REPL performs partial-word completion
381 with @code{sepia-complete-symbol}.
383 Sepia also provides a number of other ways to evaluate pieces of code in
384 Perl, and commands to process buffer text using the inferior process.
386 @menu
387 * Shortcuts::                   
388 * Debugger::                    
389 * Evaluation::                  
390 * Mutilation::                  
391 * Scratchpad::                  
392 @end menu
394 @node Shortcuts, Debugger, Interactive Perl, Interactive Perl
395 @section Shortcuts
397 ``Shortcuts'' are commands handled specially by the REPL rather than
398 being evaluated as Perl code.  They either communicate with the REPL
399 function, or provide a convenient interface to variables in the Sepia
400 package.  Shortcuts are prefixed by a comma (@key{,}), and may be
401 abbreviated to the shortest unique prefix.
403 @table @kbd
404 @item cd @var{dir}
405 Change Perl's current directory to @var{dir}.
407 @item format @var{type}
408 Set the output format to @var{type}, either ``dumper'' (using
409 @code{Data::Dumper}), ``dump'' (@code{Data::Dump}), ``yaml''
410 (@code{YAML}), or ``plain'' (stringification).  Default: ``dumper''.
412 @item help
413 Display a list of shortcuts.
415 @item methods @var{name} [@var{regexp}]
416 Display a list of functions defined in package @var{name} and its
417 @code{ISA}-ancestors matching optional pattern @var{regexp}.
419 @item package @var{name}
420 Set the default evaluation package to @var{name}.
422 @item quit
423 Exit the inferior Perl process.
425 @item reload
426 Reload @file{Sepia.pm} and recursively invoke the REPL.  This command is
427 mostly of interest when working on Sepia itself.
429 @item shell [@var{command}]
430 Execute shell command @var{command}, displaying its standard output and
431 standard error.
433 @item strict [@var{val}]
434 Set evaluation strictness to @var{val}, or toggle it if @var{val} is not
435 given.  Note that turning strictness off and on clears the REPL's
436 lexical environment.
438 @item wantarray [@var{val}]
439 Set the evaluation context to @var{val}, or toggle between scalar and
440 array context.
442 @item who [@var{name} [@var{regexp}]]
443 List identifiers in package @var{name} (main by default) matching
444 optional pattern @var{regexp}.
446 @end table
448 @node Debugger, Evaluation, Shortcuts, Interactive Perl
449 @section Debugger
451 Sepia uses Perl's debugger hooks and GUD mode to support conditional
452 breakpoints and single-stepping, and overrides Perl's @code{die()} to
453 invoke the debugger rather than unwinding the stack.  This makes it
454 possible to produce a backtrace, inspect and modify global variables,
455 and even continue execution when a program tries to kill itself.  If the
456 PadWalker module is available, Sepia also provides functions to inspect
457 and modify lexical variables.
459 The debugger has its own set of shortcuts, also prefixed by a comma.
461 @table @kbd
462 @item backtrace
463 Show a backtrace.
465 @item break @var{file}:@var{line} [@var{expr}]
466 Set a breakpoint in @var{file} at @var{line}.  If @var{expr} is
467 supplied, stop only if it evaluates to true.
469 @item down @var{n}
470 @itemx up @var{n}
471 Move the current stack frame up or down by @var{n} (or one) frames.
473 @item eval @var{n} @var{expr}
474 Evaluate @var{expr} in the lexical environment of frame @var{n}
475 (requires PadWalker).  @var{expr} should not transfer control out of
476 this environment, but is free to modify its lexicals.
478 @item inspect @var{n}
479 Inspect lexicals in frame @var{n}, counting upward from 1.
481 @item next [@var{n}]
482 Advance @var{n} (or one) lines, skipping subroutine calls.
484 @item quit
485 @itemx die
486 @itemx warn
487 Continue as the program would have executed without debugger
488 intervention, dying if the debugger was called from @code{die()}.
490 @item return @var{expr}
491 Continue execution as if @code{die()} had returned the value of
492 @var{expr}, which is evaluated in the global environment.
494 @item step [@var{n}]
495 Step forward @var{n} (or one) lines, descending into subroutines.
497 @end table
499 @node Evaluation, Mutilation, Debugger, Interactive Perl
500 @section Evaluation
502 When interactive Perl is running, Sepia can evaluate regions of code in
503 the inferior Perl process.  The following commands assume that this
504 process has already been started by calling @code{sepia-repl}.
506 @table @kbd
507 @item C-M-x
508 @itemx M-x sepia-eval-defun
509 @findex sepia-eval-defun
510 Evaluate the function around point in the inferior Perl process.  If it
511 contains errors, jump to the location of the first.
513 @item C-c C-l
514 @itemx M-x sepia-load-file
515 @findex sepia-load-file
516 Save the current buffer, then reload its file and if warnings or errors
517 occur, display an error buffer.  With a prefix argument, also rebuild
518 the cross-reference index.
520 @item C-c e
521 @itemx M-x sepia-eval-expression @key{RET} @var{expr} @key{RET}
522 @findex sepia-eval-expression
523 Evaluate @var{expr} in scalar context and echo the result.  With a
524 prefix argument, evaluate in list context.
526 @item C-c!
527 @itemx sepia-set-cwd
528 Set the REPL's working directory to the current buffer's directory.
530 @end table
532 @node Mutilation, Scratchpad, Evaluation, Interactive Perl
533 @section Mutilation
535 Sepia contains several functions to operate on regions of text using the
536 interactive Perl process.  These functions can be used like standard
537 one-liners (e.g. @samp{perl -pe ...}), with the advantage that all of
538 the functions and variables in the interactive session are available.
540 @table @kbd
541 @item M-x sepia-perl-pe-region @key{RET} @var{code} @key{RET}
542 @findex sepia-perl-pe-region
543 Evaluate @var{code} on each line in the region with @code{$_} bound to
544 the line text, collecting the resulting values of @code{$_}.  With a
545 prefix argument, replace the region with the result.
547 @item M-x sepia-perl-ne-region @key{RET} @var{code} @key{RET}
548 @findex sepia-perl-ne-region
549 Evaluate @var{code} as above, but collect the results instead.
551 @item M-x sepia-perlize-region @key{RET} @var{code} @key{RET}
552 @findex sepia-perlize-region
553 Evaluate @var{code} once with @code{$_} bound to the entire region,
554 collecting the final value of @code{$_}.  With a prefix argument,
555 replace the region.
557 @end table
559 @node Scratchpad,  , Mutilation, Interactive Perl
560 @section Scratchpad
562 @findex sepia-scratch
563 Sepia also supports a scratchpad, another form of interaction inspired
564 by Emacs' @code{*scratch*} buffer.  To create or switch to the
565 scratchpad, type @kbd{M-x sepia-scratch}.  Scratchpad mode is exactly
566 like Sepia mode, except @key{C-j} evaluates the current line and prints
567 the result on the next line.
569 @c ============================================================
570 @node Customization, Internals, Interactive Perl, Top
571 @chapter Customization
573 While Sepia can be customized in both the Perl and Emacs Lisp, most of
574 the user-accessible configuration is in the latter.  The two variables
575 most likely to need customization are @kbd{sepia-program-name} and
576 @kbd{sepia-perl5lib}.  Since Sepia tries where possible to reuse
577 existing Emacs functionality, its behavior should already be covered by
578 existing customizations.
580 @menu
581 * Emacs Variables::             
582 * Perl Variables::              
583 @end menu
585 @node Emacs Variables, Perl Variables, Customization, Customization
586 @section Emacs Variables
588 @table @kbd
590 @item sepia-complete-methods
591 If non-@code{nil}, @code{sepia-complete-symbol} will complete
592 simple method calls of the form @code{$x->} or @code{Module->}.  Since
593 the former requires evaluation of @code{$x}, this can be disabled.
594 Default: @code{T}.
596 @item sepia-eval-defun-include-decls
597 If non-@code{nil}, attempt to generate a declaration list for
598 @code{sepia-eval-defun}.  This is necessary when evaluating some code,
599 such as that calling functions without parentheses, because the presence
600 of declarations affects the parsing of barewords.  Default: @code{T}.
602 @item sepia-indent-expand-abbrev
603 If non-@code{nil}, @code{sepia-indent-or-complete} will, if
604 reindentation does not change the current line, expand an abbreviation
605 before point rather than performing completion.  Only if no abbreviation
606 is found will it perform completion.  Default: @code{T}.
608 @item sepia-module-list-function
609 The function to view a tree of installed modules.  Default:
610 @code{w3m-find-file} if Emacs-w3m is installed, or
611 @code{browse-url-of-buffer} otherwise.
613 @item sepia-perldoc-function
614 The function called to view installed modules' documentation.  Default:
615 @code{w3m-perldoc} if Emacs-w3m is installed, or @code{cperl-perldoc}
616 otherwise.
618 @item sepia-perl5lib
619 A list of directories to include in @code{PERL5LIB} when starting
620 interactive Perl.  Default: @code{nil}.
622 @item sepia-prefix-key
623 The prefix to use for for functions in @code{sepia-keymap}.  Default:
624 @key{M-.}.
626 @item sepia-program-name
627 The Perl program name for interactive Perl.  Default: ``perl''.
629 @item sepia-use-completion
630 If non-@code{nil}, various Sepia functions will generate completion
631 candidates from interactive Perl when called interactively.  This may be
632 slow or undesirable in some situations.  Default: @code{T}.
634 @item sepia-view-pod-function
635 The function called to view the current buffer's documentation.
636 Default: @code{sepia-w3m-view-pod} if Emacs-w3m is available, or
637 @code{sepia-perldoc-buffer} otherwise.
639 @end table
641 @node Perl Variables,  , Emacs Variables, Customization
642 @section Perl Variables
644 The following variables in the Sepia package control various aspects of
645 interactive evaluation.
647 @table @code
649 @item $PACKAGE
650 The package in which user input is evaluated, determined automatically
651 when code is evaluated from a buffer.  Default: @code{main}.
653 @item $PRINTER
654 The function called to format interactive output, normally set with the
655 @code{printer} shortcut.
657 @item $PRINT_PRETTY
658 If true, format some values nicely independent of the value of
659 @code{$PRINTER}.  Currently, this means columnating lists of simple
660 scalars.  Default: true.
662 @item $PS1
663 The trailing end of the prompt string, which should end with ``> ''.
664 Default: @code{"> "}.
666 @item $STOPDIE
667 If true, calls to @code{die} from interactive code will invoke the Sepia
668 debugger.  Default: true.
670 @item $STOPWARN
671 If true, calls to @code{warn} from interactive code will invoke the
672 Sepia debugger.  Default: false.
674 @item $WANTARRAY
675 If true, evaluate interactive expressions in list context.  Default: true.
677 @end table
679 @c ============================================================
680 @node Internals, Credits, Customization, Top
681 @chapter Internals
683 Many things remain unexplained except by the code itself, and some
684 details mentioned above should probably be given less prominence.  For
685 developer documentation, please see the POD for @code{Sepia} and
686 @code{Sepia::Xref}, and the doc-strings in @file{sepia.el}.
688 @node Credits, Function Index, Internals, Top
689 @unnumbered Credits
691 I would like to thank Hilko Bengen for finding and motivating me to fix
692 a bunch of bugs, and for doing the Debian packaging.
694 I would also like to thank the authors of Emacs-w3m, SLIME, ido, and
695 B::Xref for the code I stole.
697 @c ============================================================
698 @node Function Index,  , Credits, Top
699 @unnumbered Function Index
700 @printindex fn
702 @bye