This file is indexed.

/usr/share/perl5/Devel/REPL/Plugin/FancyPrompt.pm is in libdevel-repl-perl 1.003012-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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<irb>'s default prompt. The default C<fancy_prompt> looks like this:

    re.pl(main):001:0> 2 + 2
    4

C<re.pl> is a constant. C<main> 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<MultiLine> 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<current_package> is provided by L<Devel::REPL::Plugin::Packages> (which
tracks the current package). C<line_depth> is provided by a C<MultiLine> plugin
(probably C<MultiLine::PPI>).

You may also set a C<fancy_continuation_prompt>. The default is very similar to
C<fancy_prompt>'s default (except C<*> instead of C<< > >>).

=head1 SEE ALSO

C<Devel::REPL>

=head1 AUTHOR

Shawn M Moore, C<< <sartak at gmail dot com> >>

=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