Author: sparky                       Date: Mon Oct 31 14:45:49 2005 GMT
Module: vfmg                          Tag: DEVEL
---- Log message:
- rest WM functions fixed
- fvwm and metisse functions rewritten
- use qq() to avoid so many \"
- fixed behaviour when two menus have same name

---- Files affected:
vfmg:
   vfmg (1.73.2.10 -> 1.73.2.11) 

---- Diffs:

================================================================
Index: vfmg/vfmg
diff -u vfmg/vfmg:1.73.2.10 vfmg/vfmg:1.73.2.11
--- vfmg/vfmg:1.73.2.10 Mon Oct 31 04:38:45 2005
+++ vfmg/vfmg   Mon Oct 31 15:45:43 2005
@@ -294,7 +294,8 @@
 my $mno=0;     # menu number
 my $trigger=0;
 my $tag;
-my $name;
+my $name="";
+my $parent="";
 my $dirfile;
 my $dir;
 my $icon_dir;
@@ -462,6 +463,7 @@
                $mno=$menustack[$#menustack];
                $#menustack--;
                $level--;
+               $parent =~ s/(.*):.*?$/$1/ if length $name;
                next;
        }
        if($tag eq 'include') {
@@ -473,13 +475,14 @@
                next;
        }
        if($tag eq 'name') {
-               $name=getname();
-               $menu[$menustack[$#menustack]]{$name}=$mno;
+               $name = getname();
+               $parent .= ":".$name;
+               $menu[$menustack[$#menustack]]{$parent}=$mno;
                if (length $dirfile) {
-                       $desktop{$name}=$desktop{""};
+                       $desktop{$parent}=$desktop{""};
                        delete $desktop{""};
                } else {
-                       $desktop{$name}=[$name,$name,""];
+                       $desktop{$parent}=[$name,$name,""] unless defined 
$desktop{$parent};
                }
                gettag();       # must be </name> else GIGO and we don't care
                next;
@@ -551,7 +554,7 @@
                                $utfname=$name;
                        }
                        $dirfile =~ s/\..*?$//;
-                       $desktop{$name} = [$dirfile, $utfname, $icon];
+                       $desktop{$parent} = [$dirfile, $utfname, $icon];
                } else {
                        local $" = "\n- ";
                        warn "No readable $dirfile in:\n- @tmp\n";
@@ -561,7 +564,7 @@
                next;
        }
        if($tag eq 'mergefile') {
-               $name=getname();
+               my $name = getname();
                gettag();       # must be </mergefile> else GIGO and we don't 
care
                my $ok;
                foreach my $tmp (@xdg_config_dirs, '') {
@@ -660,230 +663,208 @@
 $level="";
 sub icewm { # {{{
        my $no=$_[0];
-       foreach my $entry(sort keys %{$menu[$no]}) {
-               #next if $menu[$no]{$entry}[0]==0;
-               print "$level";
-               #print "$no $menu[$no]{$entry}[0] $entry\n";
-               $name=$entry;
-               $name=~s/\"/\\\"/g;
-               if($menu[$no]{$entry}[0]<0) {
-                       print qq(prog "$name" "$menu[$no]{$entry}[1]" 
$menu[$no]{$entry}[2]\n);
-               } else {
-                       $menu[$no]{$entry}[1]="folder" if $menu[$no]{$entry}[1] 
eq "";
-                       $name=substr($name,1);
-                       print qq(menu "$name" "$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};
+               $name = $$d[1];
+               $name =~ s/\"/\\\"/g;
+               if($menu[$no]{$entry} < 0) {
+                       $apps .= qq(${level}prog "$name" "$$d[2]" $$d[3]\n);
+               } else {
+                       my $icon = $$d[2];
+                       $icon = "folder" unless length $icon;
+                       print qq(${level}menu "$name" "$icon" {\n);
                        $level.="       ";
-                       icewm($menu[$no]{$entry}[0]);
+                       icewm($menu[$no]{$entry});
                        $level=substr($level,1);
                        print "$level}\n";
                }
        }
+       print $apps;
 } # }}}
 
 sub blackbox { # {{{
        my $no=$_[0];
-       foreach my $entry(sort keys %{$menu[$no]}) {
-               print "$level";
-               if($menu[$no]{$entry}[0]<0) {
-                       print "[exec] ($entry) {$menu[$no]{$entry}[2]}\n";
-               } else {
-                       $name=$entry;
-                       $name=substr($name,1);
-                       print "[submenu] ($name)\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"."[exec] ($$d[1]) {$$d[3]}\n";
+               } else {
+                       print "$level"."[submenu] ($$d[1])\n";
                        $level.="       ";
-                       blackbox($menu[$no]{$entry}[0]);
+                       blackbox($menu[$no]{$entry});
                        $level=substr($level,1);
                        print "$level\[end]\n";
                }
        }
+       print $apps;
 } # }}}
 
 sub wmakerold { # {{{
        my $no=$_[0];
-       foreach my $entry(sort keys %{$menu[$no]}) {
-               print "$level\"";
-               my $name=$entry;
-               $name=~s/\"/\\\"/g;
-               if($menu[$no]{$entry}[0]<0) {
-                       print "$name\" EXEC $menu[$no]{$entry}[2]\n";
+       my $apps="";
+       foreach my $entry (sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys 
%{$menu[$no]}) {
+               my $d = $desktop{$entry};
+               my $name = $$d[1];
+               $name =~ s/\"/\\\"/g;
+               if($menu[$no]{$entry} < 0) {
+                       $apps .= qq($level"$name" EXEC $$d[3]\n);
                } else {
-                       $name=substr($name,1);
-                       print "$name\" MENU\n";
+                       print qq($level"$name" MENU\n);
                        $level.="       ";
-                       wmakerold($menu[$no]{$entry}[0]);
+                       wmakerold($menu[$no]{$entry});
                        $level=substr($level,1);
-                       print "$level\"$name\" END\n";
+                       print qq($level"$name" END\n);
                }
        }
+       print $apps;
 } # }}}
 
 sub wmaker { # {{{
-       my $no=$_[0];
-       my $coma=$_[1];
-       foreach my $entry(sort keys %{$menu[$no]}) {
-               print "$coma\n$level(\"";
-               $name=$entry;
-               $name=~s/\"/\\\"/g;
-               if($menu[$no]{$entry}[0]<0) {
-                       $menu[$no]{$entry}[2]=~s/\"/\\\"/g;
-                       print "$name\", EXEC, \"$menu[$no]{$entry}[2]\")";
+       my ($no, $coma)[EMAIL PROTECTED];
+       my $apps="";
+       foreach my $entry (sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys 
%{$menu[$no]}) {
+               my $d = $desktop{$entry};
+               $name = $$d[1];
+               $name =~ s/\"/\\\"/g;
+               if($menu[$no]{$entry} < 0) {
+                       (my $exec = $$d[3]) =~ s/\"/\\\"/g;
+                       $apps .= "$coma\n".
+                               qq{$level("$name", EXEC, "$exec")};
                } else {
-                       $name=substr($name,1);
-                       print "$name\"";
+                       print "$coma\n",
+                               qq{$level("$name"};
                        $level.="       ";
-                       wmaker($menu[$no]{$entry}[0],",");
+                       wmaker($menu[$no]{$entry},",");
                        $level=substr($level,1);
                        print "\n$level)";
                }
        }
+       print $apps;
 } # }}}
 
-sub xfce4 { # {{{
+# sub xfce4 { {{{
+sub xmlname($) {
+       $_ = $_[0];
+       s/&/&amp;/g;
+       s/\"/&quot;/g;
+       s/</&lt;/g;
+       s/>/&gt;/g;
+       return $_;
+}
+sub xfce4 {
        my $no=$_[0];
-       foreach my $entry(sort keys %{$menu[$no]}) {
-               print "$level<";
-               $name=$entry;
-               $name=~s/&/&amp;/g;
-               $name=~s/\"/&quot;/g;
-               $name=~s/</&lt;/g;
-               $name=~s/>/&gt;/g;
-               if($menu[$no]{$entry}[0]<0) {
-                       $menu[$no]{$entry}[2]=~s/&/&amp;/g;
-                       $menu[$no]{$entry}[2]=~s/\"/&quot;/g;
-                       $menu[$no]{$entry}[2]=~s/</&lt;/g;
-                       $menu[$no]{$entry}[2]=~s/>/&gt;/g;
-                       print "app name=\"$name\" cmd=\"$menu[$no]{$entry}[2]\" 
icon=\"$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};
+               $name = ($$d[1] =~ /["&<>]/) ? xmlname($$d[1]) : $$d[1];
+               if($menu[$no]{$entry} < 0) {
+                       $apps .= qq($level<app name="$name" cmd=");
+                       $apps .= ($$d[3] =~ /["&<>]/) ? xmlname($$d[3]) : 
$$d[3];
+                       $apps .= qq(" icon="$$d[2]"/>\n);
                } else {
-                       $name=substr($name,1);
-                       print "menu name=\"$name\" 
icon=\"$menu[$no]{$entry}[1]\" visible=\"yes\">\n";
+                       print qq($level<menu name="$name" icon="$$d[2]" 
visible="yes">\n);
                        $level.="       ";
-                       xfce4($menu[$no]{$entry}[0]);
+                       xfce4($menu[$no]{$entry});
                        $level=substr($level,1);
                        print "$level</menu>\n";
                }
        }
+       print $apps;
 } # }}}
 
 sub afterstep { # {{{
-       my $no=$_[0];
-       my $dir=$_[1];
-       print "dir=".$dir;
+       my ($no, $dir)[EMAIL PROTECTED];
+       
        foreach my $entry(keys %{$menu[$no]}) {
-               $name=$entry;
-               if($menu[$no]{$entry}[0]<0) {
-                       $file=$entry;
-                       $file=~s/\s+/_/g;
-                       $file=~s|/||g;
+               my $d = $desktop{$entry};
+               $name = encode($o_enc,$$d[1]);
+               if($menu[$no]{$entry} < 0) {
                        $name=~s/\"/\\\"/g;
-                       open F_OUT, ">> $dir/$file" or warn "$dir/$file: $!\n";
-                       print F_OUT "Exec \"$name\" exec 
$menu[$no]{$entry}[2]\n";
-                       print F_OUT "MiniPixmap \"$menu[$no]{$entry}[1]\"\n" if 
$menu[$no]{$entry}[1] ne "";
-                       #print F_OUT "MiniPixmap \"mini-app.xpm\"\n";
-                       close F_OUT;
+                       my $F_OUT;
+                       open $F_OUT, ">> $dir/$$d[0]" or warn "$dir/$$d[0]: 
$!\n";
+                       print $F_OUT qq(Exec "$name" exec $$d[3]\n);
+                       print $F_OUT qq(MiniPixmap "$$d[2]"\n) if length $$d[2];
+                       close $F_OUT;
                } else {
-                       $name=substr($name,1);
-                       $name=~s|/||g;
+                       $name =~ s|/||g;
                        mkpath("$dir/$name",0,0700);
-                       afterstep($menu[$no]{$entry}[0],"$dir/$name");
+                       afterstep($menu[$no]{$entry},"$dir/$name");
                }
        }
 } # }}}
 
 sub fvwm { # {{{
-       my $no=$_[0];
-       my $file=$_[1];
+       my ($no, $file, $basename)[EMAIL PROTECTED];
        $file=~s|^\.||;
-       my $basename=$_[2];
-       foreach my $entry(keys %{$menu[$no]}) {
-               if($menu[$no]{$entry}[0]>=0) {
-                       $name=substr($entry,1);
-                       $name=~s|/||g;
-                       my $menutitle=$name;
-                       $name=~s/\s+/_/g;
-                       fvwm($menu[$no]{$entry}[0],"$file.$name","$menutitle");
-               }
-       }
-       if (!$file) {
-               return;
-       }
-       print "Popup \"$file\"\n";
-       print "\tTitle \"$basename\"\n"; 
-       foreach my $entry(keys %{$menu[$no]}) {
-               if($menu[$no]{$entry}[0]<0) {
-                       $name=$entry;
-                       $name=~s/\"/\\\"/g;
-                       print "\tExec \"$name\"\texec $menu[$no]{$entry}[2]\n";
+       
+       my $apps = "";
+       my $this_menu = "";
+       $this_menu .= qq(Popup "$file"\n\tTitle "$basename"\n);
+       foreach my $entry (sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys 
%{$menu[$no]}) {
+               my $d = $desktop{$entry};
+               if($menu[$no]{$entry} < 0) {
+                       $name = $$d[1];
+                       $name =~ s/\"/\\\"/g;
+                       $apps .= qq(\tExec "$name"\texec $$d[3]\n);
                } else { 
-                       $name=substr($entry,1);
-                       $name=~s|/||g;
-                       my $menutitle=$name;
-                       $name=~s/\s+/_/g;
-                       print "\tPopup \"$menutitle\"\t$file.$name\n";
+                       $name = $$d[0];
+                       $name =~ s/\s+/_/g;
+                       $this_menu .= qq(\tPopup "$$d[1]"\t$file.$name\n);
+                       fvwm($menu[$no]{$entry},"$file.$name",$$d[1]);
                }
        }
-       print "EndPopup\n\n";
+       print $this_menu . $apps . "EndPopup\n\n" if length $file;
 } # }}}
 
 sub fvwm2 { # {{{
        my $no=$_[0];
-       my $file;
-       foreach my $entry(sort keys %{$menu[$no]}) {
-               print "AddToMenu $level \"";
-               $name=$entry;
-               $name=~s/\"/\\\"/g;
-               if($menu[$no]{$entry}[0]<0) {
-                       print         "$name\"  Exec $menu[$no]{$entry}[2] &\n";
-                       print "Style \"$name\"  Icon $menu[$no]{$entry}[1]\n" 
if $menu[$no]{$entry}[1] ne "";
-               } else {
-                       $name=substr($name,1);
-                       $file=$name;
-                       $file=~s/\s+/_/g;
-                       $level.=".$file";
-                       print "$name\"  Popup $level\n";
+       my $apps="";
+       foreach my $entry (sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys 
%{$menu[$no]}) {
+               my $d = $desktop{$entry};
+               ( my $name = $$d[1] ) =~ s/\"/\\\"/g;
+               if($menu[$no]{$entry}<0) {
+                       $apps .= qq(AddToMenu $level    "$name" Exec $$d[3] 
&\n);
+                       $apps .= qq(Style "$name"       Icon $$d[2]\n) if 
length $$d[2];
+               } else {
+                       my $file = $$d[0];
+                       $file =~ s/\s+/_/g;
+                       $level .= ".$file";
+                       print qq(AddToMenu $level       "$name" Popup $level\n);
                        print "DestroyMenu recreate $level\n\n";
-                       print "AddToMenu $level \"$name\"       Title\n";
-                       fvwm2($menu[$no]{$entry}[0]);
+                       print qq(AddToMenu $level       "$name" Title\n);
+                       fvwm2($menu[$no]{$entry});
                        $level=~s/\.$file$//;
                }
        }
-       print "\n";
+       print $apps."\n";
 } # }}}
 
 sub metisse { # {{{
-       my ( $no, $file, $basename ) = @_;
-       $file=~s|^\.||;
-       my $icon="";
-       foreach my $entry (keys %{$menu[$no]}) {
-               if($menu[$no]{$entry} >= 0) {
-                       $name = $desktop{$entry}[0];
-                       $name =~ s|/||g;
-                       $name =~ s/\s+/_/g;
-                       
metisse($menu[$no]{$entry},"$file.$name",$desktop{$entry}[1]);
-               }
-       }
-       return unless length $file;
+       my ($no, $file, $basename) = @_;
+       $file =~ s|^\.||;
        
-       my $apps="";
-       print "DestroyMenu $file\n";
-       print "AddToMenu $file \"$basename\" Title\n";
+       my $apps = "";
+       my $this_menu = "";
+       $this_menu .= qq(DestroyMenu $file\nAddToMenu $file "$basename" 
Title\n);
        foreach my $entry (sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys 
%{$menu[$no]}) {
                my $d = $desktop{$entry};
+               my $icon = "";
                $icon = $$d[2] if $o_icons;
-               $icon = scale_icon($icon,"png","-geometry","21x18") if $icon;
+               $icon = scale_icon($$d[2],"png","-geometry","21x18") if $icon;
                $icon = "\%$icon\%" if $icon;
                
-               if($menu[$no]{$entry}<0) {
-                       $name = $$d[1];
-                       $name =~ s/\"/\\\"/g;
-                       $apps .= "+ \"$icon$name\"\tExec exec $$d[3]\n";
+               if($menu[$no]{$entry} < 0) {
+                       ( my $name = $$d[1] ) =~ s/\"/\\\"/g;
+                       $apps .= qq(+ "$icon$name"\tExec exec $$d[3]\n);
                } else {
-                       $name = $$d[0];
-                       $name =~ s|/||g;
-                       $name =~ s/\s+/_/g;
-                       print "+ \"$icon$$d[1]\"\tPopup\t$file.$name\n";
+                       ( my $name = $$d[0] ) =~ s/\s+/_/g;
+                       $this_menu .= qq(+ "$icon$$d[1]"\tPopup\t$file.$name\n);
+                       metisse($menu[$no]{$entry},"$file.$name",$$d[1]);
                }
        }
-       print $apps. "\n";
+       print $this_menu . $apps . "\n" if length $file;
 } # }}}
 
 sub olvwm { # {{{
@@ -893,13 +874,13 @@
                my $d = $desktop{$entry};
                ( my $name = $$d[1] ) =~ s/\"/\\\"/g;
                if($menu[$no]{$entry}<0) {
-                       $apps .= "$level\"$name\"       exec $$d[3]\n";
+                       $apps .= qq($level"$name"       exec $$d[3]\n);
                } else {
-                       print "$level\"$name\" MENU\n";
+                       print qq($level"$name" MENU\n);
                        $level.="       ";
                        olvwm($menu[$no]{$entry});
                        $level=substr($level,1);
-                       print "$level\"$name\" END PIN\n";
+                       print qq($level"$name" END PIN\n);
                }
        }
        print $apps;
@@ -911,11 +892,11 @@
        foreach my $entry (sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys 
%{$menu[$no]}) {
                my $d = $desktop{$entry};
                ( my $name = $$d[1] ) =~ s/\"/\\\"/g;
-               if($menu[$no]{$entry}<0) {
+               if($menu[$no]{$entry} < 0) {
                        ( my $exec = $$d[3] ) =~ s/\"/\\\"/g;
-                       $apps .= "${level}\"$name\" \"$$d[2]\" \"$exec\"\n";
+                       $apps .= qq($level"$name" "$$d[2]" "$exec"\n);
                } else {
-                       print "${level}\"$name\" \"$$d[2]\"\n",
+                       print qq($level"$name" "$$d[2]"\n),
                                "$level+\n";
                        $level.="       ";
                        qvwm($menu[$no]{$entry});
@@ -935,9 +916,9 @@
                ( my $name = $$d[1] ) =~ s/\"/\\\"/g;
                if($menu[$no]{$entry}<0) {
                        ( my $exec = $$d[3] ) =~ s/\"/\\\"/g;
-                       $apps .= "${level}cmd \"$name\" \"$exec\"\n";
+                       $apps .= qq(${level}cmd "$name" "$exec"\n);
                } else {
-                       print "${level}menu \"$name\"\n";
+                       print qq(${level}menu "$name"\n);
                        $level.="       ";
                        aewm($menu[$no]{$entry});
                        $level=substr($level,1);
@@ -951,7 +932,7 @@
        my ($no, $mfile, $title)[EMAIL PROTECTED];
        my $F_OUT;
        open $F_OUT, ">> $dir/$mfile.menu" or warn "$dir/$mfile.menu: $!\n";
-       print $F_OUT "\"$title\"\n";
+       print $F_OUT qq("$title"\n);
        my $apps="";
        foreach my $entry (sort {$desktop{$a}[1] cmp $desktop{$b}[1]} keys 
%{$menu[$no]}) {
                my $d = $desktop{$entry};
@@ -961,10 +942,10 @@
                $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";
+                       $apps .= qq("$name" "$icon" exec "$$d[3]"\n);
                } else {
-                       print $F_OUT "\"$name\" \"$icon\" menu 
\"$dir/$$d[0].menu\"\n";
-                       enlightenment($menu[$no]{$entry},"$$d[0]","$name");
+                       print $F_OUT qq("$name" "$icon" menu 
"$dir/$$d[0].menu"\n);
+                       enlightenment($menu[$no]{$entry},$$d[0],$name);
                }
        }
        print $F_OUT $apps;
@@ -976,7 +957,7 @@
        foreach my $entry (keys %{$menu[$no]}) {
                my $d = $desktop{$entry};
                $name = encode($o_enc,$$d[1]);
-               if($menu[$no]{$entry}<0) {
+               if($menu[$no]{$entry} < 0) {
                        $name =~ s/\"/\\\"/g;
                        open F_OUT, ">> $dir/$$d[0].lnk" or warn 
"$dir/$$d[0].lnk: $!\n";
                        print F_OUT "[Shortcut]\n",
@@ -1024,13 +1005,13 @@
                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";
+                               qq($level<item label="$$d[1]">\n).
+                               qq($level       <action name="Execute">\n).
+                               qq($level        <execute>$$d[3]</execute>\n).
+                               qq($level       </action>\n).
+                               qq($level</item>\n);
                } else {
-                       print "${level}<menu id=\"$$d[1]\" label=\"$$d[1]\">\n";
+                       print qq($level<menu id="$$d[1]" label="$$d[1]">\n);
                        $level.="       ";
                        openbox($menu[$no]{$entry});
                        $level=substr($level,1);
@@ -1072,6 +1053,7 @@
        } else {
                wmaker(0,"");
        }
+       print "\n";
        exit;
 }
 if($o_output eq "xfce4") {
@@ -1097,11 +1079,11 @@
        }
        afterstep($o_strip,$dir);
        exit;
-}
+} # }}}
 if($o_output eq "fvwm") {
        fvwm($o_strip,"", "fvwm");
        exit;
-} # }}}
+}
 if($o_output eq "fluxbox") {   # This is the same as blackbox (I hope so)
        print "[begin] (Fluxbox)\n" unless $o_nomenu;
        blackbox($o_strip);
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/vfmg/vfmg?r1=1.73.2.10&r2=1.73.2.11&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to