psh
view release on metacpan or search on metacpan
lib/Psh/Prompt.pm view on Meta::CPAN
white => '\e[37m',
default => '\e[39m',
none => '\e[00m',
bgblack => '\e[40m',
bgred => '\e[41m',
bggreen => '\e[42m',
bgyellow => '\e[43m',
bgblue => '\e[44m',
bgmagenta => '\e[45m',
bgcyan => '\e[46m',
bgwhite => '\e[47m',
bgdefault => '\e[49m',
);
my %sign_table=
(
'iso8859-1' => {
332 => '/',
304 => '-',
300 => "\\",
333 => '+',
262 => '=',
261 => '|',
260 => '#',
},
'default' => {
332 => "\332",
304 => "\304",
300 => "\300",
333 => "\333",
262 => "\262",
261 => "\261",
260 => "\260",
},
);
%Psh::Prompt::prompt_vars = (
'd' => sub {
my ($wday, $mon, $mday) = (localtime)[6, 4, 3];
$wday = (Psh::Locale::weekdays())[$wday];
$mon = (Psh::Locale::months())[$mon];
return "$wday $mon $mday";
},
'e' => sub { return "\e"} ,
'E' => sub { return "\e"} ,
'h' => sub { return $Psh::host; },
'H' => sub { return $Psh::longhost || $Psh::host; },
's' => sub {
my $shell = $Psh::bin;
$shell =~ s/^.*\///;
return $shell;
},
'S' => sub { return "\0" }, # extends to \
'n' => sub { return "\n" },
't' => sub {
my ($hour, $min, $sec) = (localtime)[2, 1, 0];
return sprintf("%02d:%02d:%02d", $hour, $min, $sec);
},
'u' => sub {
# Camel, 2e, p. 172: 'getlogin'.
return getlogin || (getpwuid($>))[0] || "uid$>";
},
'w' => sub {
my $dir = $ENV{PWD};
my $home = Psh::OS::get_home_dir();
return $dir unless (length($home) > length($Psh::OS::FILE_SEPARATOR)); # in case the home dir is the root dir
$dir =~ s/\\/\\\\/g;
$dir =~ s/^\Q$home\E/\~/ if $home;
return $dir;
},
'W' => sub {
my $dir = $ENV{PWD};
$dir =~ s/\\/\\\\/g;
my ($newdir)= $dir=~ m:/([^/]+)$:;
return $newdir||$dir||'/';
},
'#' => sub { return $Psh::cmd; },
'!' => sub { return scalar(@Psh::history); },
'$' => sub { return ($> ? '$' : '#'); },
'[' => sub { return $Psh::term->ReadLine() eq 'Term::ReadLine::Gnu'?"\001":''},
']' => sub { return $Psh::term->ReadLine() eq 'Term::ReadLine::Gnu'?"\002":''},
);
sub _prompt_helper {
my $code= shift;
my $var = $Psh::Prompt::prompt_vars{$code};
my $sub;
if (ref $var eq 'CODE') {
$sub = &$var();
} elsif($code =~ /^[0-9]+$/) {
$sub= chr(oct($code));
} elsif($code =~ /^\:[0-9]+$/) {
$sub= chr($code);
} elsif($code =~ /^0x/) {
$sub= chr(hex($code));
} else {
Psh::Util::print_warning_i18n('prompt_unknown_escape',$code,$Psh::bin);
$sub = ''
}
{
local $1;
if ($sub =~ m/\\([^\\])/) {
Psh::Util::print_warning_i18n('prompt_expansion_error',$code,
$1, $Psh::bin);
$sub =~ s/\\[^\\]//g;
}
}
return $sub;
}
sub _color_helper {
my $name= shift;
my $result= '\[';
my @tmp= split /\s+/, $name;
foreach (@tmp) {
if ($color_table{$_}) {
$result.=$color_table{$_};
} else {
( run in 0.839 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )