NAME
Sepia - Simple Emacs-Perl Interface
SYNOPSIS
From inside Emacs:
M-x load-library RET sepia RET
M-x sepia-repl RET
At the prompt in the *sepia-repl*
buffer:
main @> ,help
For more information, please see Sepia.html or sepia.info, which come with the distribution.
DESCRIPTION
Sepia is a set of features to make Emacs a better tool for Perl development. This package contains the Perl side of the implementation, including all user-serviceable parts (for the cross-referencing facility see Sepia::Xref). This document is aimed as Sepia developers; for user documentation, see Sepia.html or sepia.info.
Though not intended to be used independent of the Emacs interface, the Sepia module's functionality can be used through a rough procedural interface.
Hooks
Like Emacs, Sepia's behavior can be modified by placing functions on various hooks (arrays). Hooks can be manipulated by the following functions:
add_hook(@hook, @functions)
-- Add@functions
to@hook
.remove_hook(@hook, @functions)
-- Remove named@functions
from@hook
.run_hook(@hook)
-- Run the functions on the named hook.-
Each function is called with no arguments in an eval {} block, and its return value is ignored.
Sepia currently defines the following hooks:
@PRE_PROMPT
-- Called immediately before the prompt is printed.@PRE_EVAL
-- Called immediately before evaluating user input.@POST_EVAL
-- Called immediately after evaluating user input.
Completion
Sepia tries hard to come up with a list of completions.
$re = _apropos_re($pat)
-
Create a completion expression from user input.
$val = filter_untyped
-
Return true if
$_
is the name of a sub, file handle, or package. $val = filter_typed $type
-
Return true if
$_
is the name of something of$type
, which should be either a glob slot name (e.g. SCALAR) or the special value "VARIABLE", meaning an array, hash, or scalar. $re_out = maybe_icase $re_in
-
Make
$re_in
case-insensitive if it looks like it should be. @res = all_abbrev_completions $pattern
-
Find all "abbreviated completions" for $pattern.
@res = filter_exact_prefix @names
-
Filter exact matches so that e.g. "A::x" completes to "A::xx" when both "Ay::xx" and "A::xx" exist.
@res = lexical_completions $type, $str, $sub
-
Find lexicals of
$sub
(or a parent lexical environment) of type$type
matching$str
. @compls = completions($string [, $type [, $sub ] ])
-
Find a list of completions for
$string
with glob type$type
, which may be "SCALAR", "HASH", "ARRAY", "CODE", "IO", or the special value "VARIABLE", which means either scalar, hash, or array. Completion operates on word subparts separated by [:_], so e.g. "S:m_w" completes to "Sepia::my_walksymtable". If$sub
is given, also consider its lexical variables. @compls = method_completions($expr, $string [,$eval])
-
Complete among methods on the object returned by
$expr
. The$eval
argument, if present, is a function used to do the evaluation; the default iseval
, but for example the Sepia REPL usesSepia::repl_eval
. Warning: Since it has to evaluate$expr
, method completion can be extremely problematic. Use with care. @matches = apropos($name [, $is_regex])
-
Search for function
$name
, either in all packages or, if$name
is qualified, only in one package. If$is_regex
is true, the non-package part of$name
is a regular expression.
Module information
@names = mod_subs($pack)
-
Find subs in package
$pack
. @decls = mod_decls($pack)
-
Generate a list of declarations for all subroutines in package
$pack
. $info = module_info($module, $type)
-
Emacs-called function to get module information.
$file = mod_file($mod)
-
Find the likely file owner for module
$mod
. @mods = package_list
-
Gather a list of all distributions on the system.
@mods = module_list
-
Gather a list of all packages (.pm files, really) installed on the system, grouped by distribution. XXX UNUSED
@paths = file_list $module
-
List the absolute paths of all files (except man pages) installed by
$module
. @mods = doc_list
-
Gather a list of all documented packages (.?pm files, really) installed on the system, grouped by distribution. XXX UNUSED
Miscellaneous functions
$v = core_version($module)
[$file, $line, $name] = location($name)
-
Return a [file, line, name] triple for function
$name
. lexicals($subname)
-
Return a list of
$subname
's lexical variables. Note that this includes all nested scopes -- I don't know if or how Perl distinguishes inner blocks. $lisp = tolisp($perl)
-
Convert a Perl scalar to some ELisp equivalent.
printer(\@res)
-
Print
@res
appropriately on the current filehandle. If$ISEVAL
is true, use terse format. Otherwise, use human-readable format, which can use either Data::Dumper, YAML, or Data::Dump. prompt()
-- Print the REPL prompt.$flowed = flow($width, $text)
-- Flow$text
to at most$width
columns.
Persistence
load \@keyvals
-- Load persisted data in@keyvals
.$ok = saveable $name
-- Return whether$name
is saveable.-
Saving certain magic variables leads to badness, so we avoid them.
\@kvs = save $re
-- Return a list of name/value pairs to save.
REPL shortcuts
The function implementing built-in REPL shortcut ",X" is named repl_X
.
define_shortcut $name, $sub [, $doc [, $shortdoc]]
-
Define $name as a shortcut for function $sub.
alias_shortcut $new, $old
-
Alias $new to do the same as $old.
define_shortcuts()
-
Define the default REPL shortcuts.
repl_strict([$value])
-
Toggle strict mode. Requires PadWalker and Devel::LexAlias.
repl_time([$value])
-
Toggle command timing.
who($package [, $re])
-
List variables and functions in
$package
matching$re
, or all variables if$re
is absent. $text = columnate(@items)
-
Format
@items
in columns such that they fit within$ENV{COLUMNS}
columns. @m = methods($package [, $qualified])
-
List method names in
$package
and its parents. If$qualified
, return full "CLASS::NAME" rather than just "NAME." sig_warn($warning)
-
Collect
$warning
for later printing. print_warnings()
-
Print and clear accumulated warnings.
repl()
-
Execute a command interpreter on standard input and standard output. If you want to use different descriptors, localize them before calling
repl()
. The prompt has a few bells and whistles, including:- Obviously-incomplete lines are treated as multiline input (press 'return' twice or 'C-c' to discard).
die
is overridden to enter a debugging repl at the pointdie
is called.
Behavior is controlled in part through the following package-globals:
$PACKAGE
-- evaluation package$PRINTER
-- result printer (default: dumper)$PS1
-- the default prompt$STRICT
-- whether 'use strict' is applied to input$WANTARRAY
-- evaluation context$COLUMNATE
-- format some output nicely (default = 1)-
Format some values nicely, independent of $PRINTER. Currently, this displays arrays of scalars as columns.
$REPL_LEVEL
-- level of recursive repl() calls-
If zero, then initialization takes place.
%REPL
-- maps shortcut names to handlers%REPL_DOC
-- maps shortcut names to documentation%REPL_SHORT
-- maps shortcut names to brief usage
Module browsing
$status = html_module_list([$file [, $prefix]])
-
Generate an HTML list of installed modules, looking inside of packages. If
$prefix
is missing, uses "about://perldoc/". If $file is given, write the result to $file; otherwise, return it as a string. $status = html_package_list([$file [, $prefix]])
-
Generate an HTML list of installed top-level modules, without looking inside of packages. If
$prefix
is missing, uses "about://perldoc/". $file is the same as forhtml_module_list
.
TODO
See the README file included with the distribution.
SEE ALSO
Sepia's public GIT repository is located at http://repo.or.cz/w/sepia.git.
There are several modules for Perl development in Emacs on CPAN, including Devel::PerlySense and PDE. For a complete list, see http://emacswiki.org/cgi-bin/wiki/PerlLanguage.
AUTHOR
Sean O'Rourke, <seano@cpan.org>
Bug reports welcome, patches even more welcome.
COPYRIGHT
Copyright (C) 2005-2011 Sean O'Rourke. All rights reserved, some wrongs reversed. This module is distributed under the same terms as Perl itself.