1 |
dpavlin |
171 |
package x11; |
2 |
|
|
|
3 |
|
|
use warnings; |
4 |
|
|
use strict; |
5 |
|
|
|
6 |
dpavlin |
202 |
use log; |
7 |
|
|
use File::Slurp; |
8 |
|
|
|
9 |
dpavlin |
171 |
my @cols; |
10 |
|
|
|
11 |
|
|
my $last_col = ''; |
12 |
|
|
open(my $rgb, '<', '/etc/X11/rgb.txt'); |
13 |
|
|
while(<$rgb>) { |
14 |
|
|
chomp; |
15 |
|
|
my (undef,$col) = split(/\s\s+/,$_,2); |
16 |
|
|
next unless $col =~ m{Light}; |
17 |
|
|
push @cols, $col if $last_col ne $col; |
18 |
|
|
$last_col = $col; |
19 |
|
|
} |
20 |
|
|
close($rgb); |
21 |
|
|
|
22 |
|
|
sub xterm { |
23 |
|
|
my ( $name, $cmd ) = @_; |
24 |
|
|
|
25 |
dpavlin |
202 |
my $screenrc = "/tmp/$name.screenrc"; |
26 |
|
|
|
27 |
|
|
my ($autodetach,$detach) = $ENV{DISPLAY} ? ('off','') : ( 'on', 'detach' ); |
28 |
|
|
|
29 |
|
|
write_file $screenrc, qq| |
30 |
|
|
|
31 |
|
|
autodetach $autodetach |
32 |
|
|
altscreen off |
33 |
|
|
defscrollback 10000 |
34 |
|
|
startup_message off |
35 |
|
|
|
36 |
|
|
sessionname $name |
37 |
|
|
|
38 |
|
|
screen -t $name $cmd |
39 |
|
|
logfile $log::dir/$name.log |
40 |
|
|
log on |
41 |
|
|
|
42 |
|
|
$detach |
43 |
|
|
|
44 |
|
|
|; |
45 |
|
|
|
46 |
|
|
my $screen = "screen -R $name -c $screenrc"; |
47 |
|
|
my $exec; |
48 |
|
|
|
49 |
|
|
if ( $ENV{DISPLAY} ) { |
50 |
|
|
my $fg = $cols[ unpack('C*', $name) % $#cols ]; |
51 |
|
|
$exec = "xterm -fg $fg -T '$name' -n '$name' -e '$screen'"; |
52 |
|
|
} else { |
53 |
|
|
warn "system $screen"; |
54 |
|
|
system $screen; |
55 |
|
|
return; |
56 |
|
|
} |
57 |
|
|
|
58 |
dpavlin |
171 |
warn "exec $exec"; |
59 |
|
|
exec $exec; |
60 |
|
|
} |
61 |
|
|
|
62 |
|
|
1; |