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 )