summaryrefslogtreecommitdiffstats
path: root/repl.rc
blob: 3195684cca212950c7ab7c8583bbf51c4a98e25a (plain) (blame)
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
# vim:syntax=perl:

package main;
# this is for Perl's Devel::REPL. it goes in ~/.re.pl/repl.rc

use lib 'lib';

no warnings 'redefine';

use List::Util qw(first max maxstr min minstr reduce shuffle sum);
use List::MoreUtils ':all';
use Scalar::Util qw(blessed weaken isweak tainted);
use Scalar::Defer qw(lazy defer force);
use Carp::Clan qw(verbose Devel::REPL:: Moose:: Lexical::Persistence::);

*fold = \&reduce;

sub say { print @_, "\n" }

my @plugins = (
    'ReadLineHistory',            # history saved across sessions
    'Colors',                     # colorize return value and errors
    'FancyPrompt',                # provide an irb-like prompt
    'Refresh',                    # refresh before every eval
    'Interrupt',                  # improve handling of ^C
    'OutputCache',                # access previous results
    'Nopaste',                    # paste session with #nopaste
    'PPI',                        # PPI dumping of Perl code
    'MultiLine::PPI',             # allow multiple lines

    'CompletionDriver::Keywords', # substr, while, etc
    'CompletionDriver::LexEnv',   # current environment
    'CompletionDriver::Globals',  # global variables
    'CompletionDriver::INC',      # loading new modules
    'CompletionDriver::Methods',  # class method completion
    'CompletionDriver::Turtles',  # turtle command completion
);

$_REPL->load_plugin($_) for @plugins;
$_REPL->fancy_prompt(sub { '> ' } );
$_REPL->fancy_continuation_prompt(sub { '>' x ($_[0]->line_depth+1) . ' ' });

# if at ~/work/foo/bar, load ~/.re.pl/work-foo-bar as well!
my $cd = $ENV{PWD};
$cd =~ s{^(/(?:Users|home)/[^/]+)/}{} and do {
    my $homedir = $1;
    $cd =~ s{/}{-}g;
    my $proj = "$homedir/.re.pl/$cd";
    $Devel::REPL::Script::CURRENT_SCRIPT->apply_script($proj, 0);
};