3 package Devel::REPL::Plugin::FancyPrompt;
4 # ABSTRACT: Facilitate user-defined prompts
6 our $VERSION = '1.003030';
8 use Devel::REPL::Plugin;
9 use namespace::autoclean;
11 has 'fancy_prompt' => (
12 is => 'rw', lazy => 1,
14 # yes, this needs to be a double sub
18 sprintf 're.pl(%s):%03d%s> ',
19 $self->can('current_package') ? $self->current_package : 'main',
21 $self->can('line_depth') ? ':' . $self->line_depth : '';
26 has 'fancy_continuation_prompt' => (
27 is => 'rw', lazy => 1,
29 # yes, this needs to be a double sub
33 sprintf 're.pl(%s):%03d:%d* ',
34 $self->can('current_package') ? $self->current_package : 'main',
42 is => 'rw', lazy => 1, default => 0,
45 around 'prompt' => sub {
48 if ($self->can('line_depth') && $self->line_depth) {
49 return $self->fancy_continuation_prompt->($self);
52 return $self->fancy_prompt->($self);
56 before 'read' => sub {
58 $self->lines_read($self->lines_read + 1);
71 my $repl = Devel::REPL->new;
72 $repl->load_plugin('MultiLine::PPI'); # for indent depth
73 $repl->load_plugin('Packages'); # for current package
74 $repl->load_plugin('FancyPrompt');
79 FancyPrompt helps you write your own prompts. The default fancy prompt resembles
80 C<irb>'s default prompt. The default C<fancy_prompt> looks like this:
82 re.pl(main):001:0> 2 + 2
85 C<re.pl> is a constant. C<main> is the current package. The first number is how
86 many lines have been read so far. The second number (only if you have a
87 C<MultiLine> plugin) is how deep you are; intuitively, your indent level. This
88 default can be implemented with:
90 $_REPL->fancy_prompt(sub {
92 sprintf 're.pl(%s):%03d%s> ',
93 $self->can('current_package') ? $self->current_package : 'main',
95 $self->can('line_depth') ? ':' . $self->line_depth : '';
98 C<current_package> is provided by L<Devel::REPL::Plugin::Packages> (which
99 tracks the current package). C<line_depth> is provided by a C<MultiLine> plugin
100 (probably C<MultiLine::PPI>).
102 You may also set a C<fancy_continuation_prompt>. The default is very similar to
103 C<fancy_prompt>'s default (except C<*> instead of C<< > >>).
111 Shawn M Moore, C<< <sartak at gmail dot com> >>
113 =head1 COPYRIGHT AND LICENSE
115 Copyright (C) 2007 by Shawn M Moore
117 This library is free software; you can redistribute it and/or modify
118 it under the same terms as Perl itself.