Ik ben hier nog pas nieuw, dus hopelijk ben ik met deze posting op de
juiste plaats. Ik hoor het wel.
Dit is geen vraag, maar ik wil even trots laten zien dat ik wat
geprogrammeerd heb. Zie maar wat je er mee doet.
Ik zag dat wanneer je een nieuw achtergrondje kiest door een rechtsklik op de
Ubuntu-desktop, je ook kunt kiezen uit twee 'slide shows': contest en cosmos,
die je om de zoveel tijd automagisch een nieuw achtergrondje presenteren.
Ik vroeg me af hoe dat werkte en hoe ik dat zelf kon doen en kwam met het volgende:
Door te kijken naar de verwijzing die je ziet als je je muis
even laat zweven boven de thumbnail van zo'n slide show kwam ik er
achter dat op die plaats op disk een filetje met de naam background-1.xml staat.
Blijkbaar kun je zo'n file ook toevoegen i.p.v. een jpg-bestand.
Hoe maak je zo'n bestand?
De structuur van het betreffende xml-bestandje is nogal simpel, dus het
koste me weinig moeite een Perl-script uit de grond te stampen om zo'n
file te genereren. Door het onderstaande script in je persoonlijke
bin-directory te zetten (~/bin/mySlideShow) en met chmod +x executable
te maken kun je voortaan in elke directory met plaatjes zo'n background-1.xml
file genereren dat alle plaatjes in willekeurige volgorde laat zien. Als je klikt op 'toevoegen'
moet je rechtsonder in de file-selector 'Images' vervangen door 'All files', dan kun
je de xml-file selecteren.
N.B.: Ik heb het script niet uitgebreid getest en weet bijv. niet hoe
het omgaat met filenamen met spaties er in. Als er belangstelling voor
is wil ik het wel verder uitbouwen (meerdere directories opgeven,
sequentieel en willekeurige volgorde kiezen m.b.v. switches, enz. Ik
hoor het wel.
N.B.2: Ik heb domweg de structuur van de bestaande XML gevolgd,
zonder na te denken over het veranderen van diverse waarden. Hopelijk
kan iemand uitleggen wat er allemaal mogelijk is met deze XML-file!
#!/usr/bin/perl
# mySlideShow
# Author: Eric de Hont
# Mail: edehont@xs4all.nl
# Date: wo mrt 23 01:43:16 CET 2011
##################################################
use strict;
use warnings;
use List::Util qw(shuffle);
use Cwd;
my $dir = getcwd . '/';
my $head = '<background>
<starttime>
<year>2009</year>
<month>08</month>
<day>04</day>
<hour>00</hour>
<minute>00</minute>
<second>00</second>
</starttime>
<!-- This animation will start at midnight. -->
';
my $foot = '</background>';
my @pictures;
opendir(DIR, '.') or die "can't open current directory: $!";
while (defined(my $picture = readdir(DIR))) {
next if $picture =~ /^\.\.?$/; #skip . and ..
next unless $picture =~ /^.+\.(jpg|png|gif)$/i;
push @pictures, $dir.$picture;
}
closedir(DIR);
@pictures = shuffle(@pictures); # Randomize the pictures
# Start
my @XML = $head;
die "No pictures found." unless @pictures > 0;
# First picture
push @XML, " <static>
<duration>1795.0</duration>
<file>$pictures[0]</file>
</static>\n";
# The bulk
for (my $cur = 1; $cur < @pictures; $cur++) {
push @XML, " <transition>
<duration>5.0</duration>
<from>$pictures[$cur - 1]</from>
<to>$pictures[$cur]</to>
</transition>
<static>
<duration>1795.0</duration>
<file>$pictures[$cur]</file>
</static>\n";
}
# The last picture
push @XML, " <transition>
<duration>5.0</duration>
<from>$pictures[-1]</from>
<to>$pictures[0]</to>
</transition>\n";
# Finish the XML
push @XML, $foot;
# write XML
open(XML, '> background-1.xml') or die "Couldn't open background-1.xml for writing: $!\n";
print XML @XML;
close(XML);
Groeten,
Eric de Hont
I