1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# set up Devel::REPL
{
use Term::ANSIColor;
my @plugins = (
'ClassRefresh', # refresh before every eval
'Colors', # colorize return value and errors
'Editor', # #e to edit code in vim
'FancyPrompt', # provide an irb-like prompt
'Interrupt', # improve handling of ^C
'LoadClass', # automatically load unloaded classes
'MultiLine::PPI', # allow multiple lines
'Nopaste', # paste session with #nopaste
'OutputCache', # access previous results
'Peek', # Devel::Peek support
'ReadLineHistory', # history saved across sessions
'Time', # time specific commands
'Completion',
'CompletionDriver::Globals', # global variables
'CompletionDriver::INC', # loading new modules
'CompletionDriver::Keywords', # substr, while, etc
'CompletionDriver::LexEnv', # current environment
'CompletionDriver::Methods', # class method completion
'CompletionDriver::Turtles', # turtle command completion
);
$_REPL->load_plugin($_) for @plugins;
$_REPL->fancy_prompt(sub {
my $self = shift;
"\ca" . color('blue') . "\cb" . $self->current_package
. "\ca" . color('green') . "\cb" . '(0)'
. "\ca" . color('reset') . "\cb" . '> '
} );
$_REPL->fancy_continuation_prompt(sub {
my $self = shift;
"\ca" . color('blue') . "\cb" . $self->current_package
. "\ca" . color('yellow') . "\cb" . '(' . $self->line_depth . ')'
. "\ca" . color('reset') . "\cb" . '> ' . (' ' x ($self->line_depth * 2))
});
$Devel::REPL::Plugin::Packages::PKG_SAVE = 'main';
}
# set up the default environment
{
package main;
use List::Util qw(first max maxstr min minstr reduce shuffle sum);
use List::MoreUtils ':all';
use Scalar::Util qw(blessed weaken isweak);
use Path::Class;
}
# load a local config file if it exists
{
use Cwd ();
my $cd = Path::Class::dir(Cwd::getcwd)->absolute->cleanup;
my $home = Path::Class::dir(File::HomeDir->my_home)->absolute->cleanup;
if ($home->subsumes($cd)) {
while ($cd ne $home) {
my $proj = $cd->file('.repl.rc');
if (-f $proj) {
$Devel::REPL::Script::CURRENT_SCRIPT->apply_script(
$proj->stringify,
0,
);
last;
}
$cd = $cd->parent;
}
}
}
# stuff that needs to be lexical
use 5.010; # would be nice if it was possible to do this conditionally
# do this last (and at runtime) so the previous stuff doesn't see it
unshift @INC, 'lib';
# vim:filetype=perl:
|