File: xenv

package info (click to toggle)
iceweasel 2.0.0.19-0etch1
  • links: PTS
  • area: main
  • in suites: etch
  • size: 298,784 kB
  • ctags: 317,912
  • sloc: cpp: 1,796,902; ansic: 987,677; xml: 109,036; makefile: 47,777; asm: 35,201; perl: 26,983; sh: 20,879; cs: 6,232; java: 5,513; python: 3,249; pascal: 459; lex: 306; php: 244; csh: 132; objc: 97; yacc: 79; ada: 49; awk: 14; sql: 4; sed: 4
file content (83 lines) | stat: -rwxr-xr-x 1,614 bytes parent folder | download | duplicates (9)
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
#!/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() }