Sepia is a set of features to make Emacs a better tool for Perl development, including:
- an interactive prompt (REPL) for evaluating code;
- cross-referencing to find and navigate between function and variable definitions and uses;
- variable- and function-name completion.
- eldoc support to echo function arguments in the minibuffer
- functions to simplify POD browsing with Emacs-w3m
Please see the Sepia.html or sepia.info for documentation.
The basic installation procedure is:
- run “perl Makefile.PL; make; make install”
- optionally, install w3m and Emacs-w3m
- put the elisp files somewhere Emacs will find them.
Sepia is developed on the latest version of GNU Emacs, which can be obtained from CVS or as a prebuilt package on some platforms. It can run on other versions of Emacs, but may require additional packages.
(optional) emacs-w3m from http://emacs-w3m.namazu.org/
(optional) w3m from http://w3m.sourceforge.net/
(optional) snippet.el from http://www.kazmier.com/computer/snippet.el
http://cvs.savannah.gnu.org/viewcvs/*checkout*/emacs/lisp/ido.el?root=emacs
tree-widget-emacs21-2.0 emacs-w3m-emacs21-1.4.4_2 mule-ucs-emacs21-0.85.r3 semi-emacs21-1.14.6_1 wv-1.2.4 xlhtml-0.5_1,1 libgsf-1.14.3 flim-emacs21-1.14.8 apel-emacs21-10.7 ja-nkf-2.05
The “official” source code repository mirror is at
To get a copy, install Git, then
git clone git://repo.or.cz/sepia.git
To submit a patch, please send a diff to the author, including an Emacs-style ChangeLog entry.
Need to use a vector plus current index instead of a list for sepia-found.
Make it possible to return from intermediate calls in the debugger. Returning from die() is not often useful.
This can be done with a clever DB::sub, but that dramatically slows down execution.
While they work for “normal” sub definitions, they fail on definitions that are all on one line, e.g.
sub foo { … } sub bar { … }
IO::Scalar’s README tickles a bug.
“next” (as opposed to “step”) assumes that the next statement after line $n is line $n+1, which isn’t true for loops, blank lines, multi-line statements, etc. Fix this somehow. One way might be to temporary regain control on a op_next/op_nextstate, or whatever those are called, but this would be hard and/or require XS.
It currently assumes that the last breakable statement in a sub is one line before its end. The “right” solution would be like above: to hook op_leave temporarily. This would similarly require XS trickery.
This wouldn’t seem “hard” but, having hacked on two completion codebases (Sepia’s and complete.el’s), I know there are always a lot of subtle cases to get right, and what acts “naturally” by human standards is extremely complicated to specify in code.
Possibly update existing functions to make use of hooks for better modularity.
The following is a list of bugs that are difficult to automatically reproduce, with the dates they were first observed.
Rebuilding the Xref database fixes this.
This is hard to fix – Perl doesn’t give exact line numbers for sub defs, so we have to do some minor regex-searching.
Nothing smart is done about packages, so e.g. “new Foo” will result in listings for every instance of “new” in your program.
e.g. $x->method => method. I need to rewrite this code to not suck.
Copyright (C) 2004-2009 Sean O’Rourke
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, at the time at which this version of Sepia was released.