vfmg (DEVEL): vfmg - total breakage started (: what i've done is t...
sparky
sparky at pld-linux.org
Mon Oct 31 03:39:03 CET 2005
Author: sparky Date: Mon Oct 31 02:39:03 2005 GMT
Module: vfmg Tag: DEVEL
---- Log message:
- total breakage started (: what i've done is to put every information
from desktop and directory files in %desktop hash list so everything
can be computed using ASCII, and new items from desktop files can be
added easyly
- probably a little slower, but still faster than HEAD version
- for now only enlightemnent, openbox, fbpanel done
---- Files affected:
vfmg:
vfmg (1.73.2.8 -> 1.73.2.9)
---- Diffs:
================================================================
Index: vfmg/vfmg
diff -u vfmg/vfmg:1.73.2.8 vfmg/vfmg:1.73.2.9
--- vfmg/vfmg:1.73.2.8 Sun Oct 30 21:25:05 2005
+++ vfmg/vfmg Mon Oct 31 03:38:58 2005
@@ -135,6 +135,7 @@
my @apps; # $apps{name}{category}=[icon,exec]
my @happs;
+my %desktop;
find(\&wanted, grep -d, map {"$_/applications"} @xdg_data_dirs);
sub wanted { # {{{
@@ -253,10 +254,13 @@
warn "Unknown Exec parameter variable: $1 in $File::Find::name, removing\n"
if ($tags{Exec} =~ s/(%[^%\s])//);
$tags{Exec} =~ s/%%/%/g;
- push @happs, [$utfname, $tags{Icon}, $tags{Exec}];
+ push @happs, $File::Find::name;
$apps[$#happs]{$_} = 1 # two apps can have same names now:)
foreach grep length, split /;+/, $tags{Categories};
+
+ $file =~ s/\.desktop$//;
+ $desktop{$File::Find::name} = [ $file, $utfname, $tags{Icon}, $tags{Exec} ];
} # }}}
# read XDG menu specification
@@ -291,9 +295,9 @@
my $trigger=0;
my $tag;
my $name;
+my $dirfile;
my $dir;
my $icon_dir;
-my @directory; # $directory[level]=[name,icon]
my $include;
my $tmpapps;
my @menustack;
@@ -421,7 +425,7 @@
if(($tag eq 'category')&& $include) {
$dir=getname();
foreach my $name(0..$#happs) {
- $menu[$mno]{$happs[$name][0]}=[-1,$happs[$name][1],$happs[$name][2]]
+ $menu[$mno]{$happs[$name]}=-1
if exists $apps[$name]{$dir};
}
gettag(); # must be </category> else GIGO and we don't care
@@ -437,9 +441,9 @@
}
foreach my $name(0..$#$tmpapps) {
next unless defined $tmpapps->[$name];
- foreach my $dir (keys %{$apps[$name]}) {
- $menu[$mno]{$happs[$name][0]}=[-1,$happs[$name][1],$happs[$name][2]];
- }
+ foreach my $dir (keys %{$apps[$name]}) {
+ $menu[$mno]{$happs[$name]}=-1;
+ }
}
next;
}
@@ -449,25 +453,13 @@
$menustack[$#menustack+1]=$mno;
$mno=$#menu;
$name="";
+ $dirfile="";
$include=0;
$trigger=1;
next;
}
if($tag eq '/menu') {
- #for(my $i=0; $i<=$#menu; $i++) {
- my $i=$menustack[$#menustack];
- if(exists $directory[$level]) {
- foreach my $entry(keys %{$menu[$i]}) {
- if($menu[$i]{$entry}[0]==$mno) {
- $directory[$level][0]=$entry unless $directory[$level][0];
- delete($menu[$i]{$entry});
- }
- }
- $menu[$i]{$directory[$level][0]}=[$mno,$directory[$level][1]];
- delete($directory[$level]);
- }
- #}
- $mno=$i;
+ $mno=$menustack[$#menustack];
$#menustack--;
$level--;
next;
@@ -482,43 +474,52 @@
}
if($tag eq 'name') {
$name=getname();
- $menu[$menustack[$#menustack]]{"+ $menu[$menustack[$#menustack]]{$name}=$mno;
+ if (length $dirfile) {
+ $desktop{$name}=$desktop{""};
+ delete $desktop{""};
+ } else {
+ $desktop{$name}=[$name,$name,""];
+ }
gettag(); # must be </name> else GIGO and we don't care
next;
}
if($tag eq 'directory') {
- $dir=getname();
+ $dirfile=getname();
my $lang=0;
- my $name="";
+ my $dname="";
my $icon="";
my $enc="iso-8859-1";
my $ok=0;
foreach my $tmp (@tmp) {
- open F_IN, "$tmp$dir" or next;
+ open F_IN, "$tmp$dirfile" or next;
while(<F_IN>) {
if (/^\s*Name\s*=\s*(.+?)\s*$/ && $lang<1) {
- $name=$1;
+ $dname=$1;
}
if (/^\s*Name\[$lang1\]\s*=\s*(.+?)\s*$/ && $lang<2) {
- $name=$1;
+ $dname=$1;
$lang=1;
}
if (/^\s*Name\[$lang2\]\s*=\s*(.+?)\s*$/ && $lang<3) {
- $name=$1;
+ $dname=$1;
$lang=2;
}
if (/^\s*Name\[$lang3\]\s*=\s*(.+?)\s*$/ && $lang<4) {
- $name=$1;
+ $dname=$1;
$lang=3;
}
if (/^\s*Name\[$lang4\]\s*=\s*(.+?)\s*$/ && $lang<5) {
- $name=$1;
+ $dname=$1;
$lang=4;
}
$icon=$1 if /^\s*Icon\s*=\s*(.+?)\s*$/;
$enc=$1 if /^\s*Encoding\s*=\s*(.+?)\s*$/;
}
close F_IN;
+ $ok=1; last;
+ }
+ if ($ok) {
if($o_icons) {
my $exists=0;
foreach my $dir(@icondirs) {
@@ -538,22 +539,22 @@
}
$icon="" unless $exists;
}
- if(length $name) {
- my $utfname=decode($enc,$name);
+ my $utfname;
+ if(length $dname) {
+ $utfname=decode($enc,$dname);
unless($utfname) {
- warn "$tmp$dir: wrong encoding!\n";
- $utfname=$name;
+ warn "$dirfile: wrong encoding!\n";
+ $utfname=$dname;
}
- $directory[$level]=["\x{00}$utfname",$icon];
} else {
- warn "$tmp$dir: missing Name tag!\n";
- $directory[$level]=["",$icon];
+ warn "$dirfile: missing Name tag!\n";
+ $utfname=$name;
}
- $ok=1; last;
- }
- unless ($ok) {
+ $dirfile =~ s/\..*?$//;
+ $desktop{$name} = [$dirfile, $utfname, $icon];
+ } else {
local $" = "\n- ";
- warn "No readable $dir in:\n- @tmp\n";
+ warn "No readable $dirfile in:\n- @tmp\n";
warn "Last error: $!\n";
}
gettag(); # must be </directory> else GIGO and we don't care
@@ -592,7 +593,7 @@
for(my $i=$#menu; $i>=0; $i--) {
$empty[$i]=1;
foreach my $entry(keys %{$menu[$i]}) {
- $mno=$menu[$i]{$entry}[0];
+ $mno=$menu[$i]{$entry};
if($mno<0) {
$empty[$i]=0;
} else {
@@ -611,23 +612,20 @@
for(my $i=$#menu; $i>=0; $i--) {
$count[$i]=0;
foreach my $entry(keys %{$menu[$i]}) {
- $mno=$menu[$i]{$entry}[0];
+ $mno=$menu[$i]{$entry};
if($mno<0) {
$count[$i]++;
- } else {
+ } else { # submenu
if($count[$mno]==0) {
delete($menu[$i]{$entry});
} else {
- if($count[$mno]==1) {
+ if($count[$mno]==1) { #only one entry in submenu
foreach my $name(keys %{$menu[$mno]}) {
- if($menu[$mno]{$name}[0]==-1) {
- $menu[$i]{$name}=[-1,"$menu[$mno]{$name}[1]","$menu[$mno]{$name}[2]"];
+ if($menu[$mno]{$name}==-1) { # it's aplication
+ $menu[$i]{$name}=-1;
} else {
- my $newname=$name;
- $newname=substr($newname,1);
- $newname="$entry:$newname";
- $menu[$i]{$newname}=[$menu[$mno]{$name}[0],"$menu[$mno]{$name}[1]"];
- delete($menu[$i]{$name});
+ $menu[$i]{$name}=$menu[$mno]{$name};
+ delete($menu[$mno]{$name});
}
}
delete($menu[$i]{$entry});
@@ -952,27 +950,26 @@
} # }}}
sub enlightenment { # {{{
- my $no=$_[0];
+ my ($no, $mfile, $title)=@_;
my $F_OUT;
- open $F_OUT, ">> $dir/$_[1].menu" or warn "$dir/$_[1].menu: $!\n";
- print $F_OUT "\"$_[2]\"\n";
- foreach my $entry(sort keys %{$menu[$no]}) {
- $name=encode($o_enc,$entry);
+ open $F_OUT, ">> $dir/$mfile.menu" or warn "$dir/$mfile.menu: $!\n";
+ print $F_OUT "\"$title\"\n";
+ my $apps="";
+ foreach my $entry(sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys %{$menu[$no]}) {
+ my $d = $desktop{$entry};
+ $name=encode($o_enc,$$d[1]);
+ $name=~s/\"/\'/g;
my $icon="";
- $icon=$menu[$no]{$entry}[1] if $o_icons;
- $icon=scale_icon($icon,"png","-geometry","18x18") if $icon;
- if($menu[$no]{$entry}[0]<0) {
- $name=~s/\"/\'/g;
- print $F_OUT "\"$name\" \"$icon\" exec \"$menu[$no]{$entry}[2]\"\n";
+ $icon=$$d[2] if $o_icons;
+ $icon=scale_icon($icon,"png","-geometry","18x18") if length $icon;
+ if($menu[$no]{$entry}<0) {
+ $apps.="\"$name\" \"$icon\" exec \"$$d[3]\"\n";
} else {
- $name=substr($name,1);
- $name=~s|/||g;
- my $name2=$name;
- $name2=~s/\"/\'/g;
- print $F_OUT "\"$name2\" \"$icon\" menu \"$dir/$name2.menu\"\n";
- enlightenment($menu[$no]{$entry}[0],"$name","$name");
+ print $F_OUT "\"$name\" \"$icon\" menu \"$dir/$$d[0].menu\"\n";
+ enlightenment($menu[$no]{$entry},"$$d[0]","$name");
}
}
+ print $F_OUT $apps;
close $F_OUT;
} # }}}
@@ -1000,47 +997,50 @@
sub fbpanel { # {{{
my $no=$_[0];
- foreach my $entry(sort keys %{$menu[$no]}) {
- print "$level";
- if($menu[$no]{$entry}[0]<0) {
- print "item {\n";
- print "${level} name = $entry\n";
- print "${level} action = $menu[$no]{$entry}[2]\n";
- print "${level} image = $menu[$no]{$entry}[1]\n";
- } else {
- $name=$entry;
- $name=substr($name,1);
- print "menu {\n";
- print "${level} name = $name\n";
- print "${level} image = $menu[$no]{$entry}[1]\n";
+ my $apps="";
+ foreach my $entry(sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys %{$menu[$no]}) {
+ my $d = $desktop{$entry};
+ if($menu[$no]{$entry}<0) {
+ $apps .=
+ "${level}item {\n".
+ "${level} name = $$d[1]\n".
+ "${level} action = $$d[3]\n".
+ "${level} image = $$d[2]\n".
+ "${level}}\n";
+ } else {
+ print "${level}menu {\n";
+ print "${level} name = $$d[1]\n";
+ print "${level} image = $$d[2]\n";
$level.=" ";
- fbpanel($menu[$no]{$entry}[0]);
+ fbpanel($menu[$no]{$entry});
$level=substr($level,1);
+ print "${level}}\n";
}
- print "${level}}\n";
}
+ print $apps;
} # }}}
sub openbox { # {{{
my $no=$_[0];
- foreach my $entry(sort keys %{$menu[$no]}) {
- print "$level";
- if($menu[$no]{$entry}[0]<0) {
- print "<item label=\"$entry\">\n";
- print "${level} <action name=\"Execute\">\n";
- print "${level} <execute>$menu[$no]{$entry}[2]</execute>\n";
- print "${level} </action>\n";
- print "${level}</item>\n";
+ my $apps="";
+ foreach my $entry(sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys %{$menu[$no]}) {
+ my $d = $desktop{$entry};
+ if($menu[$no]{$entry}<0) {
+ $apps .=
+ "${level}<item label=\"$$d[1]\">\n".
+ "${level} <action name=\"Execute\">\n".
+ "${level} <execute>$$d[3]</execute>\n".
+ "${level} </action>\n".
+ "${level}</item>\n";
} else {
- $name=$entry;
- $name=substr($name,1);
- print "<menu id=\"$name\" label=\"$name\">\n";
+ print "${level}<menu id=\"$$d[1]\" label=\"$$d[1]\">\n";
$level.=" ";
- openbox($menu[$no]{$entry}[0]);
+ openbox($menu[$no]{$entry});
$level=substr($level,1);
print "$level</menu>\n";
}
}
+ print $apps;
} # }}}
# WM functions }}}
================================================================
---- CVS-web:
http://cvs.pld-linux.org/vfmg/vfmg?r1=1.73.2.8&r2=1.73.2.9&f=u
More information about the pld-cvs-commit
mailing list