X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=bin%2Fsetbg;h=8de93c618fb5804a08dce4a37034bc511d5207b2;hb=18385edca6c1b1d92351133ab2696c48a48b3f07;hp=17bdc0815c5025da4b381903c81baf9afe41dea1;hpb=179f42431b4ab54214ba78d94cd8d3df05d603bb;p=clearscm.git diff --git a/bin/setbg b/bin/setbg index 17bdc08..8de93c6 100755 --- a/bin/setbg +++ b/bin/setbg @@ -63,16 +63,17 @@ contents of the bgdirs incase it has changed and display a new image". This is useful for script to be able to alert setbg that something has changed. For example, a script named rmbg might look at ~/.setbg to get the name of the current background image file and remove it then signal setbg with SIGUSR1 to -have it re-evaluate the state of bgdirs. +have it re-evaluate the state of bgdirs. Finally setbg will perform the this re-evaluation at midnight everyday. This is -useful because we point setbg to look at -bgdirs from Dropbox where Camera +useful because we point setbg to look at -bgdirs from Dropbox where Camera Uploads is included and new pictures can arrive everyday. =cut use strict; use warnings; +use experimental qw(signatures); use FindBin; use Getopt::Long; @@ -104,7 +105,7 @@ my %opts = ( my %totals; -sub displayStats () { +sub displayStats() { my $statsFile = Logger->new( name => ".$FindBin::Script.stats", path => $ENV{HOME}, @@ -124,7 +125,7 @@ sub displayStats () { return; } # displayStats -sub fillPictures () { +sub fillPictures($signame = undef) { my @images; $totals{bgdirs} = 0; @@ -150,28 +151,29 @@ sub fillPictures () { return @images; } # fillPictures -sub writeHistory($) { - my ($msg) = @_; - +sub writeHistory($msg) { open my $hist, '>>', "$ENV{HOME}/.$FindBin::Script.hist" or error "Unable to open $ENV{HOME}/.$FindBin::Script.hist for append - $!", 1; $msg = localtime() . $msg; - display $msg, $hist; + print $hist "$msg\n"; close $hist; } # writeHistory -sub updateSetBG($$) { - my ($bgimage, $lockimage) = @_; +sub writeSetBG($filename, $image) { + open my $file, '>', $filename + or error "Unable to open $filename for writing - $!", 1; - open my $setbg, '>', "$ENV{HOME}/.$FindBin::Script" - or error "Unable to open $ENV{HOME}/.$FindBin::Script for writing - $!", 1; + print $file "$image\n"; - display $bgimage, $setbg; + close $file; +} # writeSetBG - close $setbg; +sub updateSetBG($bgimage, $lockimage) { + writeSetBG "$ENV{HOME}/.$FindBin::Script", $bgimage; + writeSetBG "$ENV{HOME}/.$FindBin::Script.lock", $lockimage; my $msg = ":$bgimage"; $msg .= " lock:$lockimage" if $opts{lockscreen}; @@ -181,7 +183,7 @@ sub updateSetBG($$) { return; } # updateSetBG -sub SwitchWallPaper { +sub SwitchWallPaper($saigname) { # We don't need to do anything here, just handle the interrupt and # let the while loop continue. debug 'SwitchWallPaper: Interrupt received'; @@ -204,6 +206,7 @@ GetOptions ( 'sleep=i', 'lockscreen', 'bgdirs=s@', + 'mate', ) || Usage; local $0 = "$FindBin::Script " . join ' ', @argvCopy; @@ -225,8 +228,16 @@ for (my $i = 0; $i < scalar @{$opts{bgdirs}}; $i++) { # Using gsettings my $setbg = "gsettings"; -my $setbgOpts = "set org.gnome.desktop.background picture-uri \"file://"; -my $setLockOpts = "set org.gnome.desktop.screensaver picture-uri \"file://"; + +my ($setbgOpts, $setLockOpts); + +if ($opts{mate}) { + $setbgOpts = 'set org.mate.background picture-filename '; + $setLockOpts = 'set org.mate.screensaver picture-filename '; +} else { + $setbgOpts = "set org.gnome.desktop.background picture-uri \"file://"; + $setLockOpts = "set org.gnome.desktop.screensaver picture-uri \"file://"; +} # if my @images = fillPictures; @@ -262,7 +273,8 @@ while () { } else { $pickNewImages = 1; - my $cmd = "$setbg $setbgOpts$bgimage\" 2> /dev/null"; + my $cmd = $opts{mate} ? "$setbg $setbgOpts\"$bgimage\" 2> /dev/null" + : "$setbg $setbgOpts$bgimage\" 2> /dev/null"; ($status, @output) = Execute $cmd; @@ -275,7 +287,8 @@ while () { } # if if ($opts{lockscreen}) { - $cmd = "$setbg $setLockOpts$lockimage\" 2> /dev/null"; + $cmd = $opts{mate} ? "$setbg $setLockOpts\"$lockimage\" 2> /dev/null" + : "$setbg $setLockOpts$lockimage\" 2> /dev/null"; ($status, @output) = Execute $cmd;