Making it yours#
Settings#
:set shows the settings, :set with a name shows one, and with a name and a value changes it:
ipps> :set
max_depth 6 levels shown of a nested structure; 0: all
max_items 24 elements shown of an array or hash; 0: all
max_string 240 characters shown of a string; 0: all
prompt 'ipps> ' the prompt
prompt2 ' ...> ' the prompt for unfinished input
shell '/bin/bash -c' what "! command" runs the command with
time off show the times of every line: on or off
width 0 columns for a printed value; 0: the terminal's
ipps> :set max_items 5
ipps> [1 .. 30]
[1, 2, 3, 4, 5, ... (25 more)]
A prompt in quotes keeps its trailing space:
ipps> :set prompt "perl> "
perl>
A setting made this way lasts for the session. To keep it, put it in the start file.
The start file#
ipps keeps two files in ~/.pperl/ipps, or in $PPERL_HOME/ipps when that variable is set:
rc.plPerl that runs in the session before the first prompt. What it declares is there when you start typing.
historyThe lines you typed, read at the start and written at the end.
rc.pl is ordinary Perl, so it can load the modules you always want and define the subs you always use:
use List::Util qw(sum max min first);
use JSON::PP ();
sub slurp { my ($file) = @_; open my $fh, '<', $file or die "$file: $!"; local $/; <$fh> }
Start ipps with --norc to leave it out for once.
Settings, macros and commands in the start file#
Three calls reach the prompt itself from rc.pl.
A setting:
Peta::Shell->set(max_items => 100);
Peta::Shell->set(time => 'on');
A macro is a word that is replaced when it is the first word of a line and a space or the end of the line follows it. Given a string, the word is replaced and the rest of the line stays:
Peta::Shell->macro(p => 'print');
ipps> p "printed by a macro\n"
printed by a macro
Given a sub, the macro gets the rest of the line and returns the Perl to run in its place:
Peta::Shell->macro(sq => sub { my ($rest) = @_; "($rest) ** 2" });
ipps> sq 3 + 4
49
A command of your own is called with a colon, like the built-in ones, and gets the rest of the line:
Peta::Shell->command(greet => sub { my ($shell, $rest) = @_; print "hello, $rest\n" });
ipps> :greet world
hello, world
:help lists your commands and macros after its own. The names of the built-in commands are taken.
Without a terminal#
When standard input is not a terminal, ipps reads it line by line without a prompt and prints values and errors the same way. That makes it usable in a pipe:
printf 'my @w = split " ", "the quick brown fox";\nscalar @w\njoin "-", reverse @w\n' | pperl --shell
4
'fox-brown-quick-the'
The commands work there too.