mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 00:55:37 +00:00
84 lines
1.6 KiB
Plaintext
84 lines
1.6 KiB
Plaintext
|
#!/usr/bin/perl
|
||
|
# xenv: defines XMLterm environment variables
|
||
|
# Usage: xenv [-s|--shell] <shell-path>
|
||
|
|
||
|
use Getopt::Long;
|
||
|
|
||
|
Getopt::Long::config('bundling');
|
||
|
|
||
|
&GetOptions("shell|s=s", "help|h");
|
||
|
|
||
|
if ($opt_help) {
|
||
|
print "Usage: xenv [-s <shell-path>]\n";
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
my $shell = $ENV{SHELL};
|
||
|
$shell = $opt_shell if $opt_shell;
|
||
|
|
||
|
my $cshell = 0;
|
||
|
|
||
|
$cshell = 1 if ($shell =~ /csh$/);
|
||
|
|
||
|
$| = 1; # Flush output
|
||
|
|
||
|
cbreak(); # Raw (noecho) mode
|
||
|
|
||
|
print STDERR "\033{A\n"; # Send escape sequence on STDERR
|
||
|
|
||
|
my $key = '';
|
||
|
my $param_str = "";
|
||
|
|
||
|
my $bytes = sysread(STDIN, $key, 1);
|
||
|
while ($bytes && ($key ne "\n")) {
|
||
|
$param_str .= $key;
|
||
|
$bytes = sysread(STDIN, $key, 1);
|
||
|
}
|
||
|
|
||
|
cooked(); # Cooked mode
|
||
|
|
||
|
my @params = split /;/, $param_str;
|
||
|
|
||
|
foreach my $param (@params) {
|
||
|
if ( $param =~ /^(\w+)=(.*)$/ ) {
|
||
|
my ($name, $value) = ($1, $2);
|
||
|
|
||
|
if ($cshell) {
|
||
|
print "setenv $name $value;\n";
|
||
|
} else {
|
||
|
print "$name=$value; export $name;\n";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
exit;
|
||
|
|
||
|
BEGIN {
|
||
|
use POSIX qw(:termios_h);
|
||
|
|
||
|
my ($term, $oterm, $echo, $noecho, $fd_stdin);
|
||
|
|
||
|
$fd_stdin = fileno(STDIN);
|
||
|
|
||
|
$term = POSIX::Termios->new();
|
||
|
$term->getattr($fd_stdin);
|
||
|
$oterm = $term->getlflag();
|
||
|
|
||
|
$echo = ECHO | ECHOK | ICANON;
|
||
|
$noecho = $oterm & ~$echo;
|
||
|
|
||
|
sub cbreak {
|
||
|
$term->setlflag($noecho);
|
||
|
$term->setcc(VTIME, 1);
|
||
|
$term->setattr($fd_stdin, TCSANOW);
|
||
|
}
|
||
|
|
||
|
sub cooked {
|
||
|
$term->setlflag($oterm);
|
||
|
$term->setcc(VTIME, 0);
|
||
|
$term->setattr($fd_stdin, TCSANOW);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
END { cooked() }
|