vfmg (DEVEL): vfmg - rest WM functions fixed - fvwm and metisse fu...

sparky sparky at pld-linux.org
Mon Oct 31 15:45:49 CET 2005


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)=@_;
+	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)=@_;
+	
 	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)=@_;
 	$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)=@_;
 	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




More information about the pld-cvs-commit mailing list