package Devel::REPL::Plugin::FancyPrompt; use Devel::REPL::Plugin; use namespace::clean -except => [ 'meta' ]; has 'fancy_prompt' => ( is => 'rw', lazy => 1, # yes, this needs to be a double sub default => sub { sub { my $self = shift; sprintf 're.pl(%s):%03d%s> ', $self->can('current_package') ? $self->current_package : 'main', $self->lines_read, $self->can('line_depth') ? ':' . $self->line_depth : ''; } }, ); has 'fancy_continuation_prompt' => ( is => 'rw', lazy => 1, # yes, this needs to be a double sub default => sub { sub { my $self = shift; sprintf 're.pl(%s):%03d:%d* ', $self->can('current_package') ? $self->current_package : 'main', $self->lines_read, $self->line_depth, } }, ); has 'lines_read' => ( is => 'rw', lazy => 1, default => 0, ); around 'prompt' => sub { shift; my $self = shift; if ($self->can('line_depth') && $self->line_depth) { return $self->fancy_continuation_prompt->($self); } else { return $self->fancy_prompt->($self); } }; before 'read' => sub { my $self = shift; $self->lines_read($self->lines_read + 1); }; 1; __END__ =head1 NAME Devel::REPL::Plugin::FancyPrompt - facilitate user-defined prompts =head1 SYNOPSIS #!/usr/bin/perl use lib './lib'; use Devel::REPL; my $repl = Devel::REPL->new; $repl->load_plugin('MultiLine::PPI'); # for indent depth $repl->load_plugin('Packages'); # for current package $repl->load_plugin('FancyPrompt'); $repl->run; =head1 DESCRIPTION FancyPrompt helps you write your own prompts. The default fancy prompt resembles C's default prompt. The default C looks like this: re.pl(main):001:0> 2 + 2 4 C is a constant. C
is the current package. The first number is how many lines have been read so far. The second number (only if you have a C plugin) is how deep you are; intuitively, your indent level. This default can be implemented with: $_REPL->fancy_prompt(sub { my $self = shift; sprintf 're.pl(%s):%03d%s> ', $self->can('current_package') ? $self->current_package : 'main', $self->lines_read, $self->can('line_depth') ? ':' . $self->line_depth : ''; }); C is provided by L (which tracks the current package). C is provided by a C plugin (probably C). You may also set a C. The default is very similar to C's default (except C<*> instead of C<< > >>). =head1 SEE ALSO C =head1 AUTHOR Shawn M Moore, C<< >> =head1 COPYRIGHT AND LICENSE Copyright (C) 2007 by Shawn M Moore This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut