Hi monks,
I've written a script which contains a loop, and i was wondering if i am doing it the right way, or if there could be a better (more efficient) way?
Here's the loop code:
loop:
# Get a random background from the array
my $new = $backs[int(rand(@backs))];
# Set the background to something new
system($command . ' --type=string -s '. $gconf_item . ' \'' . $new . '
+\'');
if ($mode eq "running") {
sleep($interval*60);
goto("loop");
} # end-if
Here's the script for anyone who's interested:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
srand;
# Mode to run
#my $mode = "startup";
my $mode = "running";
# Interval to change at if $mode eq "running"
my $interval = 60;
# gconf vars
my $command = "gconftool-2";
my $gconf_item = "/desktop/gnome/background/picture_filename";
# The location of the background xml file
my $xmlfile = $ENV{HOME} . "/.gnome2/backgrounds.xml";
# Find the current background so we dont change to this
my $current = `$command -g $gconf_item`;
# Read in the xml file contents to get our list of backgrounds
my $config = XMLin($xmlfile);
# Something to store our filenames in
my @backs;
foreach my $name (keys %{$config->{wallpaper}}) {
# Skip any that have a deleted flag in the XML file
next if ($config->{wallpaper}->{$name}->{deleted} eq "true");
# Set the filename
my $file = $config->{wallpaper}->{$name}->{filename};
# Ignore the current background and the (none) background
next if (($file eq $current) || ($file eq "(none)"));
# Store the name in our array
push(@backs, $file);
} # end-foreach
loop:
# Get a random background from the array
my $new = $backs[int(rand(@backs))];
# Set the background to something new
system($command . ' --type=string -s '. $gconf_item . ' \'' . $new . '
+\'');
if ($mode eq "running") {
sleep($interval*60);
goto("loop");
} # end-if
exit;
Thanks for your help.
Cheers,
Reagen