SVN: vfmg: . README VFMG VFMG/ASCII_out.pm VFMG/DR17_out.pm VFMG/aewm_out.pm VFMG/afterstep_out.pm V...

sparky sparky at pld-linux.org
Sat Dec 2 04:19:44 CET 2006


Author: sparky
Date: Sat Dec  2 04:19:43 2006
New Revision: 8023

Added:
   vfmg/
   vfmg/README
   vfmg/VFMG/
   vfmg/VFMG/ASCII_out.pm
   vfmg/VFMG/DR17_out.pm   (contents, props changed)
   vfmg/VFMG/aewm_out.pm
   vfmg/VFMG/afterstep_out.pm
   vfmg/VFMG/blackbox_out.pm
   vfmg/VFMG/e16_out.pm
   vfmg/VFMG/e17-desktop_out.pm
   vfmg/VFMG/e17-eap_out.pm
   vfmg/VFMG/enlightenment_out.pm   (contents, props changed)
   vfmg/VFMG/fbpanel_out.pm
   vfmg/VFMG/fluxbox_out.pm   (contents, props changed)
   vfmg/VFMG/fvwm2_out.pm
   vfmg/VFMG/fvwm_out.pm
   vfmg/VFMG/icewm_out.pm
   vfmg/VFMG/metisse_out.pm
   vfmg/VFMG/olvwm_out.pm
   vfmg/VFMG/openbox_out.pm
   vfmg/VFMG/qvwm_out.pm
   vfmg/VFMG/wmaker-old_out.pm
   vfmg/VFMG/wmaker_out.pm
   vfmg/VFMG/wmii_out.pm
   vfmg/VFMG/xfce4_out.pm
   vfmg/VFMG/xpde_out.pm
   vfmg/vfmg   (contents, props changed)
   vfmg/vfmg.cron
   vfmg/vfmg.init   (contents, props changed)
   vfmg/vfmg.sysconfig
   vfmg/vfmgrc
Log:
- added to SVN, because of symlinks problems


Added: vfmg/README
==============================================================================
--- (empty file)
+++ vfmg/README	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,16 @@
+AUTHORS:
+- GoTaR <gotar at poczta.onet.pl>
+- Przemyslaw Iskra <sparky at pld-linux.org>
+
+TODO:
+- default configuration for:
+  aewm, afterstep, olvwm, wmaker, xpde
+- main menu name
+- check for empty $file
+- default f/a icon option
+- old style afterstep menu
+- fvwm2: use 'AddToFunc' and 'Exec exec'?
+- locate the slowest part
+- make use of XDG_{CONFIG,DATA}_{DIRS,HOME} env. variables
+- support for the rest of tags (vfmg -t)
+- applnk support

Added: vfmg/VFMG/ASCII_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/ASCII_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,56 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub decode_tags() {
+	return qw(GenericName Comment);
+}
+
+sub ASCII {
+	my ($no, $level, $cnum)=@_;
+	my $cnext = $cnum + 1;
+	my @apps;
+	my @tmp = ();
+	@tmp = %{$main::menu[$no]} if defined %{$main::menu[$no]};
+	my $all = ($#tmp + 1) / 2;
+	my $num = 0;
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		$num++;
+		if($main::menu[$no]{$entry} < 0) {
+			push @apps, $d;
+		} else {
+			my $step = " \033[${cnum}m\033(0\017x\033(B\033[0m ";
+			if ($num >= $all and ( $#apps < 0 )) {
+				$step = "   ";
+				print "$level \033[${cnum}m\033(0mq\033(B\033[${cnext}m\033[1m[$$d{Name}]";
+			} else {
+				print "$level \033[${cnum}m\033(0tq\033(B\033[${cnext}m\033[1m[$$d{Name}]";
+			}
+			print " ($$d{GenericName})" if $$d{GenericName};
+			print " [$$d{Comment}]" if $$d{Comment};
+			print "\033[0m\n";
+			ASCII($main::menu[$no]{$entry},$level.$step, $cnext);
+		}
+	}
+	$num = 0;
+	foreach my $d (@apps) {
+		if ($num >= $#apps) {
+			print "$level \033[${cnum}m\033(0\017mq\033(B\033[${cnext}m$$d{Name}";
+		} else {
+			print "$level \033[${cnum}m\033(0\017tq\033(B\033[${cnext}m$$d{Name}";
+		}
+		print " ($$d{GenericName})" if $$d{GenericName};
+		print " [$$d{Comment}]" if $$d{Comment};
+		print "\033[0m\n";
+		$num++;
+	}
+}
+
+sub do_menu() {
+	print "\n\033[31m\033[1m[Menu]\033[0m\n";
+	ASCII($main::opt{strip},"", 31);
+}
+
+1;

Added: vfmg/VFMG/DR17_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/DR17_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1 @@
+link e17-eap_out.pm
\ No newline at end of file

Added: vfmg/VFMG/aewm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/aewm_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,28 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub aewm {
+	my ($no, $level)=@_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		( my $name = $$d{Name} ) =~ s/\"/\\\"/g;
+		if($main::menu[$no]{$entry} < 0) {
+			( my $exec = $$d{Exec} ) =~ s/\"/\\\"/g;
+			$apps .= qq(${level}cmd "$name" "$exec"\n);
+		} else {
+			print qq(${level}menu "$name"\n);
+			aewm($main::menu[$no]{$entry}, $level."\t");
+			print "${level}end\n";
+		}
+	}
+	print $apps;
+}
+
+sub do_menu() {
+	aewm($main::opt{strip},"");
+}
+
+1;

Added: vfmg/VFMG/afterstep_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/afterstep_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,38 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+use File::Path qw(mkpath);
+
+sub destdir {
+	return "$ENV{'HOME'}/GNUstep/Library/AfterStep/start";
+}
+
+sub afterstep {
+	my ($no, $dir) = @_;
+	
+	foreach my $entry (keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		my $name = main::encode($main::opt{encoding},$$d{Name});
+		if ($main::menu[$no]{$entry} < 0) {
+			$name=~s/\"/\\\"/g;
+			my $icon = "";
+			$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+			my $F_OUT;
+			open $F_OUT, ">> $dir/$$d{file}" or warn "$dir/$$d{file}: $!\n";
+			print $F_OUT qq(Exec "$name" exec $$d{Exec}\n);
+			print $F_OUT qq(MiniPixmap "$icon"\n) if length $icon;
+			close $F_OUT;
+		} else {
+			$name =~ s#/##g;
+			mkpath("$dir/$name",0,0700);
+			afterstep($main::menu[$no]{$entry},"$dir/$name");
+		}
+	}
+}
+
+sub do_menu() {
+	afterstep($main::opt{strip},$main::opt{destdir});
+}
+
+1;

Added: vfmg/VFMG/blackbox_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/blackbox_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,30 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub blackbox {
+	my ($no, $level) = @_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		if($main::menu[$no]{$entry} < 0) {
+			$apps .= "$level"."[exec] ($$d{Name}) {$$d{Exec}}\n";
+		} else {
+			print "$level"."[submenu] ($$d{Name})\n";
+			blackbox($main::menu[$no]{$entry}, $level."\t");
+			print "$level\[end]\n";
+		}
+	}
+	print $apps;
+}
+
+sub do_menu() {
+	my $wm = $main::o_output eq "fluxbox" ? "Fluxbox" : "Blackbox";
+
+	print "[begin] ($wm)\n" unless $main::opt{nomenu};
+	blackbox($main::opt{strip}, "");
+	print "[end]\n" unless $main::opt{nomenu};
+}
+
+1;

Added: vfmg/VFMG/e16_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/e16_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,50 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub destdir {
+	if ( $main::o_output eq "enlightenment" ) {
+		return "$ENV{'HOME'}/.enlightenment/menus";
+	} else {
+		return "$ENV{'HOME'}/.e16/menus";
+	}
+}
+
+sub icons_dir {
+	if ( $main::o_output eq "enlightenment" ) {
+		return "$ENV{'HOME'}/.enlightenment/icons";
+	} else {
+		return "$ENV{'HOME'}/.e16/icons";
+	}
+}
+
+sub e16 {
+	my ($no, $mfile, $title)=@_;
+	my $F_OUT;
+	open $F_OUT, ">> $main::opt{destdir}/$mfile.menu"
+		or warn "$main::opt{destdir}/$mfile.menu: $!\n";
+	print $F_OUT qq("$title"\n);
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		my $name = main::encode($main::opt{encoding},$$d{Name});
+		$name=~s/\"/\'/g;
+		my $icon = "";
+		$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+		if ($main::menu[$no]{$entry} < 0) {
+			$apps .= qq("$name" "$icon" exec "$$d{Exec}"\n);
+		} else {
+			print $F_OUT qq("$name" "$icon" menu "$main::opt{destdir}/$$d{file}.menu"\n);
+			e16( $main::menu[$no]{$entry}, $$d{file}, $name);
+		}
+	}
+	print $F_OUT $apps;
+	close $F_OUT;
+}
+
+sub do_menu() {
+	e16( $main::opt{strip}, "index", "Enlightenment");
+}
+
+1;

Added: vfmg/VFMG/e17-desktop_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/e17-desktop_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,115 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+use File::Path qw(mkpath);
+
+sub decode_tags() {
+	return qw(GenericName Comment);
+}
+
+sub destdir() {
+	return "$ENV{'HOME'}/.e/e/applications/menu/all";
+}
+
+sub icons_dir() {
+	return "$ENV{'HOME'}/.e/e/applications/all";
+}
+
+=example e17 desktop
+[Desktop Entry]
+Encoding=UTF-8
+Name=<name>
+GenericName=<generic>
+Comment=<comment>
+Exec=<exec>
+StartupWMClass=<class>
+X-Enlightenment-WindowName=
+X-Enlightenment-WindowTitle=
+X-Enlightenment-WindowRole=
+Icon=<icon>
+StartupNotify=true
+Type=Application
+=cut
+
+my %DR;
+
+sub e17($$$);
+sub e17($$$) {
+	my ($no, $dir, $tab) = @_;
+	my $dirs = "";
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $icon_exists = 0;
+		my $d = $main::desktop[$entry];
+		my $icon = "";
+		$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+
+		my $common_desk = "[Desktop Entry]\n" .
+				"Encoding=UTF-8\n" .
+				"Name=$$d{Name}\n";
+		$common_desk .= "Comment=$$d{Comment}\n" if exists $$d{Comment};
+		$common_desk .= "Icon=$icon\n" if length $icon;
+
+		if ($main::menu[$no]{$entry} < 0) {
+			open F_OUT, ">", "$main::opt{destdir}/../../all/$$d{file}.desktop"
+				or die "Can't create .desktop $main::opt{destdir}/../../all/$$d{file}.desktop file: $!\n";
+			print F_OUT $common_desk;
+			print F_OUT "GenericName=$$d{GenericName}\n"
+				if exists $$d{GenericName};
+			print F_OUT "StartupNotify=true\n" if exists $$d{StartupNotify}
+				and $$d{StartupNotify} =~ /^(1|true)$/;
+			print F_OUT "Exec=$$d{Exec}\n",
+				"Type=Application\n";
+			close F_OUT;
+
+			$apps .= "$$d{file}.desktop\n";
+		} else {
+			my $subdir = sprintf "$dir/$$d{file}";
+			mkpath($subdir,0,0700);
+			open F_OUT, "> $subdir/.directory";
+			print F_OUT $common_desk;
+			print F_OUT "Type=Directory\n";
+			close F_OUT;
+
+			e17($main::menu[$no]{$entry},$subdir,"$tab\t");
+			$dirs .= "$$d{file}\n";
+		}
+	}
+	open F_OUT, ">> $dir/.order" or warn "$dir/.order: $!\n";
+	print F_OUT $dirs;
+	print F_OUT $apps;
+	close F_OUT;	
+}
+
+sub do_menu() {
+=to implement later
+	$main::opt{wcnt_file} = "" unless defined $main::opt{wcnt_file};
+	$DR{wcnt} = {};
+	foreach my $wcnt_file (split /\s*;\s*/, $main::opt{wcnt_file}) {
+		unless (open F_IN, $wcnt_file) {
+			warn "Can't open WCNT file '$wcnt_file': $!\n";
+			next;
+		}
+		while ( <F_IN> ) {
+			next if /^\s*#/;
+			next unless s/^\s*(\S+)//;
+			my $name = $1;
+			$DR{wcnt}{$name} = [undef, undef, undef];
+			foreach my $num (0..3) {
+				last unless s/^\s*"(([^"]|\")*?[^\\])"// or s/^\s*(\S+)//;
+				$DR{wcnt}{$name}[$num] = $1 unless $1 eq "*";
+			}
+			warn "Omitted: $_\n" if length($_) and $main::o_verbose;
+		}
+		close F_IN;
+	}
+	$DR{wcnt} = undef unless %{$DR{wcnt}};
+=cut
+	
+	e17($main::opt{strip}, $main::opt{destdir}, "");
+}
+
+1;
+
+# vi: ts=4 sw=4

Added: vfmg/VFMG/e17-eap_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/e17-eap_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,294 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+use File::Path qw(mkpath);
+
+sub decode_tags() {
+	return qw(GenericName Comment);
+}
+
+sub destdir() {
+	return "$ENV{'HOME'}/.e/e/applications/favorite";
+}
+
+sub icons_dir() {
+	return "$ENV{'HOME'}/.e/e/applications/all";
+}
+
+my %DR;
+
+sub e17($$$);
+sub e17($$$) {
+	my ($no, $dir, $tab) = @_;
+	my $dirs = "";
+	my $apps = "";
+	my @edje = qw(edje_cc -id . -fd . icon.edc icon.eap);
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $icon_exists = 0;
+		my $d = $main::desktop[$entry];
+		my $name = $$d{Name};
+		print $tab.$name.".." if $main::o_verbose;
+		my $icon = $$d{Icon};
+
+		if ( defined $DR{existing}->{$$d{file}} ) {
+			my $e = $DR{existing}->{$$d{file}};
+			if (
+				-r "$main::opt{icons_dir}/$$d{file}.eap"
+					and
+				(
+					(not defined $$e{Name} and not defined $$d{Name}) 
+						or ($$e{Name} eq $$d{Name})
+				)
+				and
+				(
+					(not defined $$e{GenericName} and not defined $$d{GenericName})
+						or ($$e{GenericName} eq $$d{GenericName})
+				)
+				and
+				(
+					(not defined $$e{Comment} and not defined $$d{Comment})
+						or ($$e{Comment} eq $$d{Comment})
+				)
+				and
+				(
+					(not defined $$e{Exec} and not defined $$d{Exec})
+						or ($$e{Exec} eq $$d{Exec} )
+				)
+			)
+			{
+				if ( -r $icon ) {
+					(my $md5 = `md5sum $icon`) =~ s/\s+.*//s;
+					if ( defined $$e{IconMD5} ) {
+						$icon_exists = 1 if ( $md5 eq $$e{IconMD5} );
+					}
+				} else {
+					$icon_exists = 1 unless defined $$e{IconMD5};
+				}
+			}
+		}
+		
+		unless ( $icon_exists ) {
+			delete $DR{existing}->{$$d{file}}
+				if exists $DR{existing}->{$$d{file}};
+			my $md5;
+			if ( -r $icon ) {
+				($md5 = `md5sum $icon`) =~ s/\s+.*//s;
+			}
+			my $e = {
+				Name	=> $$d{Name},
+				GenericName	=> $$d{GenericName},
+				Comment	=> $$d{Comment},
+				Exec	=> $$d{Exec},
+				IconMD5	=> $md5
+			};
+			$DR{existing}->{$$d{file}} = $e;
+			
+			unlink $DR{icon};
+			if ( not -r $icon and defined $DR{text_icon} ) {
+				( my $exe = $DR{text_icon} ) =~ s/%1/"$name"/;
+				system($exe);
+			} else {
+				$icon = $DR{tmp}."/blank.xpm" unless -r $icon;
+				main::scale_icon($icon);
+			}
+			die "No icon $DR{icon}\n" unless -r $DR{icon};
+			print ".." if $main::o_verbose;
+		}
+		
+		if ($main::menu[$no]{$entry} < 0) {
+			if ( $icon_exists ) {
+				$apps .= $$d{file} . ".eap\n";
+				print "..EXISTS\n" if $main::o_verbose;
+				next;
+			}
+			my $file = "$main::opt{icons_dir}/$$d{file}.eap";
+
+			unlink "icon.eap";
+			system(@edje);
+			print ".." if $main::o_verbose;
+			my @eapp = qw(enlightenment_eapp icon.eap);
+			push @eapp, "-set-name",$name;
+			push @eapp, "-set-generic",$$d{GenericName}
+				if $$d{GenericName};
+			push @eapp, "-set-comment",$$d{Comment}
+				if $$d{Comment};
+			push @eapp, "-set-exe",$$d{Exec};
+			if ( defined $DR{wcnt} and exists $DR{wcnt}{$$d{file}} ) {
+				my $wcnt = $DR{wcnt}{$$d{file}};
+				push @eapp, "-set-win-class", $$wcnt[0]
+					if defined $$wcnt[0];
+				push @eapp, "-set-win-name", $$wcnt[1] if defined $$wcnt[1];
+				push @eapp, "-set-win-title", $$wcnt[2]
+					if defined $$wcnt[2];
+				push @eapp, "-set-win-role", $$wcnt[3] if defined $$wcnt[3];
+			} else {
+				if ( $$d{term} == 1 ) {
+					if ( defined $main::opt{termapp_class} ) {
+						(my $tapp = $main::opt{termapp_class}) =~ s/%1/$$d{bin}/;
+						push @eapp, "-set-win-class", $tapp;
+					}
+					if ( defined $main::opt{termapp_name} ) {
+						(my $tapp = $main::opt{termapp_name}) =~ s/%1/$$d{bin}/;
+						push @eapp, "-set-win-name", $tapp;
+					}
+				} else {
+					(my $exe = (split /\s/, $$d{Exec})[0]) =~ s#.*/##;
+					$exe = ucfirst lc $exe;
+					push @eapp, "-set-win-class", $exe;
+				}
+			}
+			system(@eapp);
+			rename "icon.eap", $file;
+			
+			print "..DONE\n" if $main::o_verbose;
+			$apps .= $$d{file} . ".eap\n";
+		} else {
+			my $subdir = sprintf "%s/%s", $dir, $$d{file};
+			my $file = $subdir . "/.directory.eap";
+			my $file2 = "$main::opt{icons_dir}/$$d{file}.eap";
+			mkpath($subdir,0,0700);
+			print ".." if $main::o_verbose;
+			unless ( $icon_exists ) {
+				unlink "icon.eap";
+				system(@edje);
+				print ".." if $main::o_verbose;
+				system("enlightenment_eapp","icon.eap",
+					"-set-name",$name);
+			}
+			rename "icon.eap", $file2;
+			symlink ($file2, $file);
+
+			print "..DONE\n" if $main::o_verbose;
+			e17($main::menu[$no]{$entry},$subdir,"$tab\t");
+			$dirs .= $$d{file}."\n";
+		}
+	}
+	open F_OUT, ">> $dir/.order" or warn "$dir/.order: $!\n";
+	print F_OUT $dirs;
+	print F_OUT $apps;
+	close F_OUT;	
+}
+
+sub do_menu() {
+	die "Enlightenment DR17 requires icon scaling\n"
+		unless $main::opt{icons_scale};
+	die "Enlightenment DR17 conflicts with icons fork\n"
+		if $main::opt{icons_fork};
+	
+	$| = 1;
+	print "Generating DR17 menu, this may take a long time\n";
+	$DR{tmp} = $ENV{'TMPDIR'};
+	$DR{tmp} = $ENV{'TMP'}  unless -d $DR{tmp};
+	$DR{tmp} = "/tmp"  unless -d $DR{tmp};
+	$DR{icon} = $DR{tmp}."/icon.".$main::opt{icons_oext};
+	
+	$main::opt{convert} =~ s/\%out/$DR{icon}/g;
+	chdir($DR{tmp});
+	unlink $DR{icon};
+	# icon is allways needed
+	open F_OUT, "> blank.xpm"; # {{{
+	print F_OUT <<EOF;
+		static char *blank[] = {
+			"1 1 1 1",
+			". c None",
+			"."
+		};
+EOF
+	close F_OUT; # }}}
+	open F_OUT, "> icon.edc"; # {{{
+	print F_OUT << "EOF";
+	images {
+		image: "icon.$main::opt{icons_oext}" COMP;
+	}
+	collections {
+		group {
+			name: "icon";
+			max: 48 48;
+			 parts {
+				part {
+					name: "image";
+					mouse_events: 0;
+					description {
+						state: "default" 0.0;
+						aspect: 1.0 1.0;
+						image.normal: "icon.$main::opt{icons_oext}";
+					}
+				}
+			}
+		}
+	}
+EOF
+	close F_OUT; # }}}
+	
+	$main::opt{wcnt_file} = "" unless defined $main::opt{wcnt_file};
+	$DR{wcnt} = {};
+	foreach my $wcnt_file (split /\s*;\s*/, $main::opt{wcnt_file}) { # {{{
+		unless (open F_IN, $wcnt_file) {
+			warn "Can't open WCNT file '$wcnt_file': $!\n";
+			next;
+		}
+		while ( <F_IN> ) {
+			next if /^\s*#/;
+			next unless s/^\s*(\S+)//;
+			my $name = $1;
+			$DR{wcnt}{$name} = [undef, undef, undef];
+			foreach my $num (0..3) {
+				last unless s/^\s*"(([^"]|\")*?[^\\])"// or s/^\s*(\S+)//;
+				$DR{wcnt}{$name}[$num] = $1 unless $1 eq "*";
+			}
+			warn "Omitted: $_\n" if length($_) and $main::o_verbose;
+		}
+		close F_IN;
+	} # }}}
+	$DR{wcnt} = undef unless %{$DR{wcnt}};
+	
+	$DR{text_icon} = $main::opt{text_icon};
+	if ( defined $DR{text_icon} ) {
+		$DR{text_icon} =~ s#\%in#$DR{tmp}/blank.xpm#g;
+		$DR{text_icon} =~ s#\%out#$DR{icon}#g;
+	}
+
+	$DR{existing} = {};
+	if (not $main::opt{full_regen} and
+		open F_IN, "$main::opt{icons_dir}/.existing") {
+
+		my $icon = "broken?";
+		while (my $line = <F_IN>) {
+			if ( $line =~ /^\[(.*)\]$/ ) {
+				$icon = $1;
+				$DR{existing}->{$icon} = {};
+			} elsif ( $line =~ /^(\S+?):\t(.*)$/ ) {
+				$DR{existing}->{$icon}->{$1} = $2;
+			}
+		}
+		close F_IN;
+	}
+
+	e17($main::opt{strip}, $main::opt{destdir}, "");
+	unlink "blank.xpm";
+	unlink "icon.edc";
+	unlink "icon.eap";
+	unlink $DR{icon};
+	unlink "$main::opt{icons_dir}/.eap.cache.cfg"
+		if -r "$main::opt{icons_dir}/.eap.cache.cfg";
+	for my $dir (qw(all bar favorite restart startup)) {
+		unlink "$main::opt{destdir}/../$dir/.eap.cache.cfg"
+			if -r "$main::opt{destdir}/../$dir/.eap.cache.cfg";
+	}
+	utime undef, undef, "$main::opt{destdir}/../bar/.order";
+
+	open F_OUT, "> $main::opt{icons_dir}/.existing";
+	foreach my $icon ( keys %{$DR{existing}} ) {
+		print F_OUT "[$icon]\n";
+		foreach my $entry ( keys %{$DR{existing}->{$icon}} ) {
+			print F_OUT "$entry:	$DR{existing}->{$icon}->{$entry}\n"
+				if defined $DR{existing}->{$icon}->{$entry};
+		}
+	}
+	close F_OUT;
+	
+	exit;
+}
+
+1;

Added: vfmg/VFMG/enlightenment_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/enlightenment_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1 @@
+link e16_out.pm
\ No newline at end of file

Added: vfmg/VFMG/fbpanel_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/fbpanel_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,36 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub fbpanel {
+	my ($no, $level)=@_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		my $icon = "";
+		$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+		if($main::menu[$no]{$entry}<0) {
+			$apps .=
+				"${level}item {\n".
+				"${level}	name = $$d{Name}\n".
+				"${level}	action = $$d{Exec}\n";
+			$apps .= "${level}	image = $icon\n" if length $icon;
+			$apps .= "${level}}\n";
+		} else {
+			print "${level}menu {\n";
+			print "${level}	name = $$d{Name}\n";
+			print "${level}	image = $icon\n" if length $icon;
+			fbpanel($main::menu[$no]{$entry}, $level."\t");
+			print "${level}}\n";
+		}
+	}
+	print $apps;
+}
+
+
+sub do_menu() {
+	fbpanel($main::opt{strip},"");
+}
+
+1;

Added: vfmg/VFMG/fluxbox_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/fluxbox_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1 @@
+link blackbox_out.pm
\ No newline at end of file

Added: vfmg/VFMG/fvwm2_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/fvwm2_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,33 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub fvwm2 {
+	my ($no, $level)=@_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		( my $name = $$d{Name} ) =~ s/\"/\\\"/g;
+		my $icon = "";
+		$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+		$icon = "\%$icon\%" if length $icon;
+		if ($main::menu[$no]{$entry} < 0) {
+			$apps .= qq(AddToMenu $level	"$icon$name"	Exec $$d{Exec} &\n);
+		} else {
+			my $file = $$d{file};
+			$file =~ s/\s+/_/g;
+			print qq(AddToMenu $level	"$icon$name"	Popup $level.$file\n);
+			print "DestroyMenu recreate $level.$file\n\n";
+			print qq(AddToMenu $level.$file	"$icon$name"	Title\n);
+			fvwm2($main::menu[$no]{$entry}, "$level.$file");
+		}
+	}
+	print $apps."\n";
+}
+
+sub do_menu() {
+	fvwm2($main::opt{strip}, "fvwm2");
+}
+
+1;

Added: vfmg/VFMG/fvwm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/fvwm_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,33 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub fvwm {
+	my ($no, $file, $basename) = @_;
+	$file =~ s#^\.##;
+	
+	my $apps = "";
+	my $this_menu = "";
+	$this_menu .= qq(Popup "$file"\n\tTitle "$basename"\n);
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		if ($main::menu[$no]{$entry} < 0) {
+			my $name = $$d{Name};
+			$name =~ s/\"/\\\"/g;
+			$apps .= qq(\tExec "$name"\texec $$d{Exec}\n);
+		} else {
+			my $name = $$d{file};
+			$name =~ s/\s+/_/g;
+			$this_menu .= qq(\tPopup "$$d{Name}"\t$file.$name\n);
+			fvwm($main::menu[$no]{$entry},"$file.$name", $$d{Name});
+		}
+	}
+	print $this_menu . $apps . "EndPopup\n\n" if length $file;
+}
+
+sub do_menu() {
+	fvwm($main::opt{strip},"", "fvwm");
+}
+
+1;

Added: vfmg/VFMG/icewm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/icewm_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,31 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub icewm {
+	my ($no, $level) = @_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		my $name = $$d{Name};
+		$name =~ s/\"/\\\"/g;
+		my $icon = "";
+		$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+		if ($main::menu[$no]{$entry} < 0) {
+			$apps .= qq(${level}prog "$name" "$icon" $$d{Exec}\n);
+		} else {
+			$icon = "folder" if not length $icon and $main::opt{icons};
+			print qq(${level}menu "$name" "$icon" {\n);
+			icewm($main::menu[$no]{$entry}, $level."\t");
+			print "$level}\n";
+		}
+	}
+	print $apps;
+}
+
+sub do_menu() {
+	icewm($main::opt{strip}, "");
+}
+
+1;

Added: vfmg/VFMG/metisse_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/metisse_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,35 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub metisse {
+	my ($no, $file, $basename) = @_;
+	$file =~ s#^\.##;
+	
+	my $apps = "";
+	my $this_menu = "";
+	$this_menu .= qq(DestroyMenu $file\nAddToMenu $file "$basename" Title\n);
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		my $icon = "";
+		$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+		$icon = "\%$icon\%" if length $icon;
+		
+		if ($main::menu[$no]{$entry} < 0) {
+			( my $name = $$d{Name} ) =~ s/\"/\\\"/g;
+			$apps .= qq(+ "$icon$name"\tExec exec $$d{Exec}\n);
+		} else {
+			( my $name = $$d{file} ) =~ s/\s+/_/g;
+			$this_menu .= qq(+ "$icon$$d{Name}"\tPopup\t$file.$name\n);
+			metisse($main::menu[$no]{$entry}, "$file.$name", $$d{Name});
+		}
+	}
+	print $this_menu . $apps . "\n" if length $file;
+}
+
+sub do_menu() {
+	metisse($main::opt{strip},"", "metisse");
+}
+
+1;

Added: vfmg/VFMG/olvwm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/olvwm_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,27 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub olvwm {
+	my ($no, $level) = @_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		( my $name = $$d{Name} ) =~ s/\"/\\\"/g;
+		if ($main::menu[$no]{$entry} < 0) {
+			$apps .= qq($level"$name"	exec $$d{Exec}\n);
+		} else {
+			print qq($level"$name" MENU\n);
+			olvwm($main::menu[$no]{$entry}, $level."\t");
+			print qq($level"$name" END PIN\n);
+		}
+	}
+	print $apps;
+}
+
+sub do_menu() {
+	olvwm($main::opt{strip}, "");
+}
+
+1;

Added: vfmg/VFMG/openbox_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/openbox_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,39 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub openbox {
+	my ($no, $level) = @_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		if ($main::menu[$no]{$entry}<0) {
+			$apps .=
+				qq($level<item label="$$d{Name}">\n).
+				qq($level	<action name="Execute">\n).
+				qq($level	 <execute>$$d{Exec}</execute>\n).
+				qq($level	</action>\n).
+				qq($level</item>\n);
+		} else {
+			print qq($level<menu id="$$d{Name}" label="$$d{Name}">\n);
+			openbox( $main::menu[$no]{$entry}, $level."\t");
+			print "$level</menu>\n";
+		}
+	}
+	print $apps;
+}
+
+sub do_menu() {
+	if ($main::opt{nomenu}) {
+		openbox($main::opt{strip}, "");
+	} else {
+		print "<openbox_menu>\n";
+		print qq(<menu id="root-menu" label="PLD Linux">\n);
+		openbox($main::opt{strip}, "");
+		print "</menu>\n";
+		print "</openbox_menu>\n";
+	}
+}
+
+1;

Added: vfmg/VFMG/qvwm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/qvwm_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,32 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub qvwm {
+	my ($no, $level) = @_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		( my $name = $$d{Name} ) =~ s/\"/\\\"/g;
+		my $icon = "";
+		$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+		if ($main::menu[$no]{$entry} < 0) {
+			( my $exec = $$d{Exec} ) =~ s/\"/\\\"/g;
+			$apps .= qq($level"$name" "$icon" "$exec"\n);
+		} else {
+			print qq($level"$name" "$icon"\n),
+				"$level+\n";
+			qvwm( $main::menu[$no]{$entry}, $level."\t");
+			print "$level-\n";
+		}
+	}
+	print $apps;
+}
+
+sub do_menu() {
+	print "[StartMenu]\n";
+	qvwm($main::opt{strip}, "");
+}
+
+1;

Added: vfmg/VFMG/wmaker-old_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/wmaker-old_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,28 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub wmakerold {
+	my ($no, $level) = @_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		my $name = $$d{Name};
+		$name =~ s/\"/\\\"/g;
+		if ($main::menu[$no]{$entry} < 0) {
+			$apps .= qq($level"$name" EXEC $$d{Exec}\n);
+		} else {
+			print qq($level"$name" MENU\n);
+			wmakerold( $main::menu[$no]{$entry}, $level."\t");
+			print qq($level"$name" END\n);
+		}
+	}
+	print $apps;
+}
+
+sub do_menu() {
+	wmakerold($main::opt{strip},"");
+}
+
+1;

Added: vfmg/VFMG/wmaker_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/wmaker_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,36 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub wmaker {
+	my ($no, $coma, $level) = @_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		my $name = $$d{Name};
+		$name =~ s/\"/\\\"/g;
+		if ($main::menu[$no]{$entry} < 0) {
+			(my $exec = $$d{Exec}) =~ s/\"/\\\"/g;
+			$apps .= "$coma\n".
+				qq{$level("$name", EXEC, "$exec")};
+		} else {
+			print "$coma\n",
+				qq{$level("$name"};
+			wmaker( $main::menu[$no]{$entry},",",$level."\t");
+			print "\n$level)";
+		}
+	}
+	print $apps;
+}
+
+sub do_menu() {
+	if($main::opt{strip}) {
+		wmaker(1,",","");
+	} else {
+		wmaker(0,"","");
+	}
+	print "\n";
+}
+
+1;

Added: vfmg/VFMG/wmii_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/wmii_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,35 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub wmii {
+	my ($no, $level) = @_;
+	my @apps;
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		(my $name = main::encode($main::opt{encoding}, $$d{Name})) =~ s#/#:#g;
+		if ($main::menu[$no]{$entry} < 0) {
+			push @apps, [$name, $$d{Exec}];
+		} else {
+			system("wmiir", "create",
+				"/menu/items/menu$level/items/$name [>",
+				"wmiir write /menu/lookup /items/menu$level/$$d{file}/items; "
+				."wmiir write /menu/ctl 'display 1'");
+				
+			wmii( $main::menu[$no]{$entry}, $level ."/". $$d{file} );
+		}
+	}
+	foreach my $app (@apps) {
+		system("wmiir", "create",
+			"/menu/items/menu" . $level . "/items/" . $$app[0],
+			$$app[1]);
+	}
+}
+
+sub do_menu() {
+	system(qw(wmiir remove /menu/items/menu));
+	wmii($main::opt{strip}, "");
+}
+
+1;

Added: vfmg/VFMG/xfce4_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/xfce4_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,44 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub xmlname($) {
+	$_ = $_[0];
+	s/&/&amp;/g;
+	s/\"/&quot;/g;
+	s/</&lt;/g;
+	s/>/&gt;/g;
+	return $_;
+}
+
+sub xfce4 {
+	my ($no, $level) = @_;
+	my $apps = "";
+	foreach my $entry (sort main::cmpdname keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		my $name = ($$d{Name} =~ /["&<>]/) ?
+			xmlname($$d{Name}) : $$d{Name};
+		my $icon = "";
+		$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+		if ($main::menu[$no]{$entry} < 0) {
+			$apps .= qq($level<app name="$name" cmd=");
+			$apps .= ($$d{Exec} =~ /["&<>]/) ? xmlname($$d{Exec}) : $$d{Exec};
+			$apps .= qq(" icon="$icon"/>\n);
+		} else {
+			print qq($level<menu name="$name" icon="$icon" visible="yes">\n);
+			xfce4( $main::menu[$no]{$entry},$level."\t");
+			print "$level</menu>\n";
+		}
+	}
+	print $apps;
+}
+
+sub do_menu() {
+	print "<xfdesktop-menu>\n";
+	print qq(<title name="Desktop Menu" visible="yes"/>\n) unless $main::opt{nomenu};
+	xfce4($main::opt{strip},"\t");
+	print "</xfdesktop-menu>\n";
+}
+
+1;

Added: vfmg/VFMG/xpde_out.pm
==============================================================================
--- (empty file)
+++ vfmg/VFMG/xpde_out.pm	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,38 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+use File::Path qw(mkpath);
+
+sub destdir {
+	return "$ENV{'HOME'}/.xpde/Start Menu/Programs";
+}
+
+sub xpde {
+	my ($no, $dir) = @_;
+	foreach my $entry (keys %{$main::menu[$no]}) {
+		my $d = $main::desktop[$entry];
+		my $name = main::encode($main::opt{encoding},$$d{Name});
+		if ($main::menu[$no]{$entry} < 0) {
+			$name =~ s/\"/\\\"/g;
+			my $icon = "";
+			$icon = main::scale_icon($$d{Icon}) if $main::opt{icons};
+			open F_OUT, ">> $dir/$$d{file}.lnk" or warn "$dir/$$d{file}.lnk: $!\n";
+			print F_OUT "[Shortcut]\n",
+						"Caption=$name\n",
+						"Command=$$d{Exec}\n";
+			print F_OUT "Icon=$icon\n" if length $icon;
+			close F_OUT;
+		} else {
+			$name =~ s#/##g;
+			mkpath("$dir/$name",0,0700);
+			xpde($main::menu[$no]{$entry}, "$dir/$name");
+		}
+	}
+}
+
+sub do_menu() {
+	xpde($main::opt{strip}, $main::opt{destdir});
+}
+
+1;

Added: vfmg/vfmg
==============================================================================
--- (empty file)
+++ vfmg/vfmg	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,895 @@
+#!/usr/bin/perl -w
+#$Id: vfmg,v 1.98.2.4 2006/12/02 02:04:59 sparky Exp $
+
+use strict;
+use File::Find qw(find);
+use Getopt::Long qw(GetOptions :config bundling);
+use Encode qw(encode decode);
+
+my $VERSION = "0.9.95";
+
+# header {{{
+# default options {{{
+my $o_help=0;
+my $o_version=0;
+my $o_tags=0;
+my $o_end=0;
+my $o_verbose=0;
+my %defopt = (
+	exec		=> 0,
+	exec_full	=> 0,
+	icons		=> 1,
+	icons_ext	=> 0,
+	icons_full	=> 0,
+	icons_scale	=> 0,
+	icons_fork	=> 0,
+	icons_dir	=> "",
+	icons_oext	=> "png",
+	
+	utf			=> 0,
+	encoding	=> "",
+	
+	clear		=> 0,
+	promote		=> 0,
+	strip		=> 0,
+	nomenu		=> 0,
+	only_in		=> "",
+	xterm		=> "xterm -name xterm-%1 -e %2",
+	convert		=> "convert -geometry 16x16 \%in \%out",
+	full_regen	=> 0,
+	destdir		=> "",
+	
+);
+our %opt;
+our $o_output;
+$defopt{xterm}="$ENV{'VFMG_TERM'}" if $ENV{'VFMG_TERM'};
+
+sub wms() {
+	my @wms;
+	foreach (grep -d, map {"$_/VFMG"} @INC) {
+		opendir DIR, $_;
+		push @wms, map /^(.*)_out\.pm$/, readdir DIR;
+		closedir DIR;
+	}
+	return join ", ", sort @wms;
+}
+# }}}
+
+GetOptions( # {{{
+	'help|h'			=>	\$o_help,
+	'version|V'			=>	\$o_version,
+	'tags|t'			=>	\$o_tags,
+	'end|e'				=>	\$o_end,
+	'verbose|v'			=>	\$o_verbose,
+	
+	'exec|x!'			=>	\$opt{exec},
+	'exec-full|full-exec|X!'
+						=>	\$opt{exec_full},
+	'icons|i!'			=>	\$opt{icons},
+	'icons-ext|T!'		=>	\$opt{icons_ext},
+	'icons-full|full-icons|I!'	
+						=>	\$opt{icons_full},
+	'icons-scale|scale-icons|S!'
+						=>	\$opt{icons_scale},
+	'icons-fork!'		=>	\$opt{icons_fork},
+	'icons-dir|d=s'		=>	\$opt{icons_dir},
+	'icons-oext|O=s'	=>	\$opt{icons_oext},
+	'text-icon=s'		=>	\$opt{text_icon},
+	
+	'wcnt-file=s'		=>	\$opt{wcnt_file},
+	'termapp-class=s'	=>	\$opt{termapp_class},
+	'termapp-name=s'	=>	\$opt{termapp_name},
+
+
+	'utf8|u!'			=>	\$opt{utf},
+	'encoding|E=s'		=>	\$opt{encoding},
+	
+	'clear|c!'			=>	\$opt{clear},
+	'promote|p!'		=>	\$opt{promote},
+	'strip|s!'			=>	\$opt{strip},
+	'nomenu|m!'			=>	\$opt{nomenu},
+	'only-in|o=s'		=>	\$opt{only_in},
+	
+	'xterm|r=s'			=>	\$opt{xterm},
+	'convert|C=s'		=>	\$opt{convert},
+	'full-regen|f!'		=>	\$opt{full_regen},
+	'destdir|D=s'		=>	\$opt{destdir},
+	); # }}}
+
+if($o_help) { # {{{
+	my $wms = wms();
+	print <<EOF;
+Usage:	$0 [options] {$wms}
+
+Options:
+    -h, --help	  - print this help and exit
+    -V, --version	  - print version information and exit
+
+  Diagnostics:
+    -t, --tags    - echo omitted tags to stderr
+    -e, --end     - echo omitted XDG file ending to stderr
+    -v, --verbose - verbose stderr output
+
+  Executables and icons:
+    -x, --exec        - check for binaries existence
+    -X, --exec-full   - extend binaries to full path (implies -x)
+    -i, --icons       - add icons to menu (default: yes)
+    -T, --icons-ext   - check for icons existence and add extension if required
+    -I, --icons-full  - check for icons existence and extend to full path
+
+    -S, --icons-scale - scale (shrink) icons (implies -i -I)
+        --icons-fork  - scale icons after fork
+    -d, --icons-dir=  - output dir for icons
+    -O, --icons-oext= - output icons extension (default: png)
+
+  Output encoding:
+    -u, --utf8        - output in utf8 (default is locale setting)
+    -E, --encoding=   - output in given encoding (e.g. iso-8859-2)
+
+  Menu structure:
+    -c, --clear    - remove empty menus
+    -p, --promote  - promote submenus with single entry
+    -s, --strip    - strip 1st level menu
+    -m, --nomenu   - don't add additional menu info
+                     (valid for blackbox, fluxbox, openbox, xfce4)
+    -o, --only-in  - coma separated list of accepted OnlyShowIn= WMs
+
+    -r, --xterm=   - set x terminal application
+                     default: "$defopt{xterm}"
+                     example "gnome-terminal -t Terminal.%1 -x %2"
+    -C, --convert= - command to use to scale icons
+                     default: "$defopt{convert}"
+
+    -f, --full-regen - regenerate everything (delete scaled icons)
+    -D, --destdir=   - directory to save multifile menu
+
+  All but diagnostics boolean options have oposite --no-<name> version too.
+
+EOF
+	exit;
+} # }}}
+
+if ($o_version) {
+	(my $date = '$Date: 2006/12/02 02:04:59 $' ) =~ s/^.Date: (.*) \$$/$1/;
+	print "VFolders Menu Generator version: $VERSION\n";
+	print "Last update: $date\n";
+	exit;
+}
+
+die "Missing argument {".wms()."}\n" unless exists $ARGV[0];
+
+$o_output = $ARGV[0];
+require "VFMG/${o_output}_out.pm"; # for testing
+eval { require "VFMG/${o_output}_out.pm" }
+	or die "Unrecognized argument: $o_output\n";
+
+# vfmgrc {{{
+my @rcFiles = ("/etc/vfmgrc", "$ENV{'HOME'}/.vfmgrc");
+push @rcFiles, "$ENV{'HOME_ETC'}/.vfmgrc" if exists $ENV{'HOME_ETC'};
+
+my @rcBody;
+foreach my $rc (grep -r, @rcFiles) {
+	open F_IN, $rc or next;
+	my $read = 1;
+	while (<F_IN>) {
+		next if ( /^\s*#/ );
+		$_ .= <F_IN> while s/\\\n$//;
+		$read = 0 if /^\[/;
+		if ( /^\[$o_output\]/ ) {
+			$read = 1;
+			next;
+		}
+		push @rcBody, $_ if $read;
+	}
+	close F_IN;
+}
+
+my %rcopt = map { /^\s*(.*?)\s*=\s*(.*)\s*$/ } @rcBody;
+# }}}
+
+foreach my $opt (keys %opt) {
+	$opt{$opt} = $rcopt{$opt} unless defined $opt{$opt};
+	$opt{$opt} = $defopt{$opt} unless defined $opt{$opt};
+	next unless defined $opt{$opt};
+	$opt{$opt} =~ s/\${HOME}/$ENV{'HOME'}/go;
+}
+
+# check dependencies
+$opt{exec} = 1 if $opt{exec_full};
+eval { $opt{icons_dir} = VFMG::Output::icons_dir() }
+	unless (length $opt{icons_dir});
+if ($opt{icons_scale}) {
+	if ( length $opt{icons_dir} ) {
+		my $conv = (split /\s/, $opt{convert})[0];
+		if ( length `which $conv` ) {
+			$opt{icons} = 1;
+			$opt{icons_full} = 1;
+		} else {
+			$opt{icons_scale} = 0;
+			warn "$conv is not executable, not scaling icons.\n";
+		}
+	} else {
+		$opt{icons_scale} = 0;
+		warn "Icons destination directory is not specified, not scaling.\n";
+	}
+}
+$opt{icons_ext} = 1 if $opt{icons_full};
+$opt{encoding}="utf8" if $opt{utf};
+unless (length $opt{destdir}) {
+	eval { $opt{destdir} = VFMG::Output::destdir() }
+		or delete $opt{destdir};
+}
+my %OSI_accept;
+if ( defined $opt{only_in} ) {
+	%OSI_accept = map {($_, 1)} split /[,\s]+/, $opt{only_in};
+}
+# header }}}
+
+# search dirs {{{
+my @xdg_data_dirs = grep -d,
+  ( exists $ENV{'XDG_DATA_HOME'}
+	? $ENV{'XDG_DATA_HOME'}
+	: "$ENV{'HOME'}/.local/share"
+  ),
+  ( exists $ENV{'XDG_DATA_DIRS'}
+	? split /:+/, $ENV{'XDG_DATA_DIRS'}
+	: qw(/usr/local/share /usr/share)
+  );
+
+my @xdg_config_dirs = map { "$_/menus" } grep -d,
+  ( exists $ENV{'XDG_CONFIG_HOME'}
+	? $ENV{'XDG_CONFIG_HOME'}
+	: "$ENV{'HOME'}/.config"
+  ),
+  ( exists $ENV{'XDG_CONFIG_DIRS'}
+	? split /:+/, $ENV{'XDG_CONFIG_DIRS'}
+	: qw(/etc/xdg)
+  );
+
+my @icondirs = (
+	grep (-d,
+		"$ENV{'HOME'}/.icons/",
+		map({"$_/icons/"} @xdg_data_dirs),
+		qw(/usr/share/pixmaps/
+		  /usr/share/icons/default.kde/48x48/apps/
+		  /usr/share/icons/hicolor/48x48/apps/)
+	),
+	'',
+);
+
+my @path;
+if ( $opt{exec} ) {
+	@path = (grep (-d, split(/:+/,$ENV{'PATH'})), "");
+	if( length $opt{xterm} ) {
+		my $exists = 0;
+		my $bin = $opt{xterm};
+		$bin =~ s/(\S+).*/$1/;
+		foreach my $dir (@path) {
+			if (-x "$dir/$bin") {
+				$exists = 1;
+				$opt{xterm} = "$dir/$opt{xterm}" if $opt{exec_full};
+				last;
+			}
+		}
+		unless ($exists) {
+			$opt{xterm} = "";
+			warn "Can't find $bin.",
+				" Terminal applications will not be included.\n";
+		}
+	}
+}
+# search dirs }}}
+
+# get locale (for Name[*]) {{{
+my @lang;
+sub addlang {
+	my $l = $_[0];
+	push @lang, $l unless grep {$_ eq $l} @lang;
+	$l =~ s/@.*//;
+	push @lang, $l unless grep {$_ eq $l} @lang;
+	$l =~ s/\..*//;
+	push @lang, $l unless grep {$_ eq $l} @lang;
+	$l =~ s/_.*//;
+	push @lang, $l unless grep {$_ eq $l} @lang;
+}
+addlang($ENV{'LC_ALL'})			if exists $ENV{'LC_ALL'};
+addlang($ENV{'LC_MESSAGES'})	if exists $ENV{'LC_MESSAGES'};
+if (exists $ENV{'LANGUAGE'}) {
+	foreach my $lang (split /:/, $ENV{'LANGUAGE'}) {
+		addlang($lang);
+	}
+}
+addlang($ENV{'LANG'})	if exists $ENV{'LANG'};
+my $langs = join "|", @lang;
+sub findfirstlang {
+	foreach my $lang (@lang) {
+		foreach (@_) {
+			return $_ if /\[$lang\]/;
+		}
+	}
+	return (grep !/\[.*\]/, @_)[0];
+} # }}}
+
+# what is $DESKTOP_FILE_PATH?
+
+my @apps;	# $apps{name}{category}=[icon,exec]
+our @desktop;
+my @decode_tags = qw(Name);
+eval { push @decode_tags, VFMG::Output::decode_tags() };
+
+find(\&wanted, grep -d, map {"$_/applications"} @xdg_data_dirs);
+
+sub wanted { # {{{
+	return unless -f && /^[^.].*\.desktop$/;
+	my $file = $_;
+
+	open F_IN, $file or warn "$File::Find::name: $!\n" and return;
+	my %tags = (
+		file		=> $file,
+		Icon		=> '',
+		Categories	=> '',
+		Type		=> '',
+		NoDisplay	=> 'false',
+		map {
+			## "foo = bar" or "Name[baz] = bar"
+			/^\s*
+			(Name(?:\[(?:$langs)\])?
+			 |GenericName(?:\[(?:$langs)\])?
+			 |Comment(?:\[(?:$langs)\])?
+			 |Icon|Exec|Categories|Terminal|Type|Encoding|NoDisplay
+			 |OnlyShowIn|StartupNotify)
+			\s* = \s* (.+?)
+			\s*$/ox
+		  } <F_IN>,
+	);
+	close F_IN;
+
+	return unless lc $tags{Type} eq 'application';
+	return if lc $tags{NoDisplay} eq 'true';
+	if ( defined $tags{OnlyShowIn} ) {
+		return unless
+			grep {exists $OSI_accept{$_}} split /;+/, $tags{OnlyShowIn};
+	}
+	  
+	$tags{term} =
+	  ($tags{Terminal} && $tags{Terminal} =~ /^(?:1|true)$/i) ? 1 : 0;
+	return if $tags{term} and not $opt{xterm};
+
+	($tags{bin}) = ($tags{Exec} =~ /(\S+)/);
+	if ( $opt{exec} ) {
+		my $exists = 0;
+		foreach my $dir (@path) {
+			if (-x "$dir/$tags{bin}") {
+				$exists++;
+				$tags{Exec} = "$dir/$tags{Exec}" if $opt{exec_full};
+				last;
+			}
+		}
+		return unless $exists;
+	}
+	if ( $tags{term} ) {
+		$tags{bin} =~ s#.*/##;
+		$_ = $opt{xterm};
+		s/%1/$tags{bin}/g;
+		s/%2/$tags{Exec}/g;
+		$tags{Exec} = $_;
+	}
+	if ( $opt{icons_ext} ) {
+		my $exists = 0;
+		ALLDIRS: foreach my $dir (@icondirs) {
+			foreach my $ext ('', qw(.svg .xpm .png)) {
+				if (-f $dir . $tags{Icon} . $ext) {
+					$tags{Icon} .= $ext;
+					$tags{Icon} = $dir . $tags{Icon} if $opt{icons_full};
+					$exists = 1;
+					last ALLDIRS;
+				}
+			}
+		}
+		$tags{Icon} = '' unless $exists;
+	}
+	
+	$tags{Encoding} = exists $tags{Encoding} ? $tags{Encoding} : 'iso-8859-1';
+	
+	foreach my $tag_name (@decode_tags) {
+		my @all = (grep /^$tag_name/, keys %tags);
+		next if ($#all < 0);
+		my $first = findfirstlang(@all);
+		my $enc = $tags{Encoding};
+	
+		if ($enc eq 'Legacy-Mixed') {
+			warn "$File::Find::name: Legacy-Mixed encoding is depreciated.\n";
+
+			# this code is untested
+			#    --radek
+			my ($lang) = ($first =~ /^$tag_name\[([^\]]+)/);
+			if ($lang !~ /_/) {
+				warn "$File::Find::name: cannot get encoding name for"
+				  . " `$lang'. Assuming iso-8859-1\n";
+				$enc = "iso-8859-1";
+			} else {
+				require POSIX;
+				my $old_locale = POSIX::setlocale(POSIX::LC_ALL());
+				eval {
+					POSIX::setlocale(POSIX::LC_ALL(), $lang);
+					require I18N::Langinfo;
+					$enc = I18N::Langinfo::langinfo(I18N::Langinfo::CODESET());
+				};
+				warn "something went wrong: $@" if $@;
+				POSIX::setlocale(POSIX::LC_ALL(), $old_locale);
+			}
+		}
+		$tags{$tag_name} = decode($enc, $tags{$first});
+		unless ($tags{$tag_name}) {
+			warn "$File::Find::name: $first: wrong encoding!\n";
+			$tags{$tag_name} = $tags{$first};
+		}
+	}
+	$tags{file} =~ s/\.desktop$//;
+	unless ($tags{Name}) {
+		$tags{Name} = $tags{file};
+		warn "$File::Find::name: missing Name tag! using $tags{Name}\n";
+	}
+	
+	if ( $tags{Exec} =~ /%\S/ ) {
+		$tags{Exec} =~ s/([^%])%v/$1/g;
+		$tags{Exec} =~ s/([^%])%k/$1$file/g;
+		$tags{Exec} =~ s/([^%])%c/$1$tags{Name}/g;
+		my $iicon = '';
+		$iicon = "--icon $tags{Icon}" if $tags{Icon};
+		$tags{Exec} =~ s/([^%])%i/$1$iicon/g;
+		$tags{Exec} =~ s/%(?i:[fudn])//g;
+		warn "Unknown Exec parameter variable: $1 "
+			."in $File::Find::name, removing\n"
+		  if ($tags{Exec} =~ s/(%[^%\s])// and $o_verbose);
+		$tags{Exec} =~ s/%%/%/g;
+	}
+	
+	push @desktop, \%tags;
+	#[$tags{file}, $tags{Name}, $tags{Icon}, $tags{Exec}, $tags{GenericName}, $tags{term}, $tags{bin}];
+	
+	$apps[$#desktop]{$_} = 1    # two apps can have same names now:)
+	  foreach grep length, split /;+/, $tags{Categories};
+
+} # }}}
+
+# read XDG menu specification
+my $file;
+foreach my $tmp (@xdg_config_dirs) {
+	open F_IN, "$tmp/applications.menu" or next;
+	local $/ = undef;
+	($file = <F_IN>) =~ y/ \t\r\n//d;
+	$file =~ s/<!--.*?-->//g;
+	close F_IN;
+	last;
+}
+unless (defined $file) {
+	local $" = "\n- ";
+	warn "No readable applications.menu in:\n- @xdg_config_dirs\n";
+	die "Last error: $!\n";
+}
+
+sub gettag {
+	$file=~s/.*?<(.*?)>\s*//;
+	$1;
+}
+
+sub getname {
+	$file=~s/\s*(.*?)\s*</</;
+	$1;
+}
+
+our @menu; # $menu[parent]{dir number} = (menu number);
+my $desknum = $#desktop;
+
+# logic {{{
+sub cand { # {{{
+	my @iapps;	# internal applications list
+	my $name;
+	my $firstrun=1;
+	while ( (my $tag = gettag()) ne '/And') {
+		if($tag eq 'Category') {
+			my $dir=getname();
+			if($firstrun) {
+				foreach $name(0..$desknum) {
+					$iapps[$name]=$apps[$name] if exists $apps[$name]{$dir};
+				}
+				$firstrun=0;
+			} else {
+				foreach $name(0..$#iapps) {
<<diff output has been trimmed to 500 lines, 396 line(s) remained.>>

Added: vfmg/vfmg.cron
==============================================================================
--- (empty file)
+++ vfmg/vfmg.cron	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,2 @@
+# regenerate default menus for different windowmanagers
+15 */2 * * *	root	/etc/rc.d/init.d/vfmg restart >/dev/null 2>&1

Added: vfmg/vfmg.init
==============================================================================
--- (empty file)
+++ vfmg/vfmg.init	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,54 @@
+#!/bin/sh
+# $Id: vfmg.init,v 1.15 2006/04/18 16:35:22 sparky Exp $
+
+# vfmg		Regenaration for window managers menus
+#
+# chkconfig:	345 93 07
+#
+# description:	Support for fluxbox, XFCE4, fvwm, fvwm2
+#
+# author:	Lukasz Pawelczyk <havner at pld-linux.org> 2004
+
+# Source function library
+. /etc/rc.d/init.d/functions
+
+if [ -f /etc/sysconfig/vfmg ]; then
+	. /etc/sysconfig/vfmg
+fi
+
+case "$1" in
+  start|restart|reload|force-reload)
+  	umask 022
+	if is_yes "$FLUXBOX" && [ -f /etc/X11/fluxbox/menu2 ]; then
+			show "Regenerating fluxbox menu"; busy
+			if vfmg fluxbox > /etc/X11/fluxbox/menu2. 2>/dev/null \
+				&& mv /etc/X11/fluxbox/menu2. /etc/X11/fluxbox/menu2; then ok; else fail; fi
+	fi
+	if is_yes "$XFCE4" && [ -f /etc/xdg/xfce4/desktop/menu2.xml ]; then
+			show "Regenerating XFCE4 menu"; busy
+			if vfmg xfce4 > /etc/xdg/xfce4/desktop/menu2.xml. 2>/dev/null \
+				&& mv -f /etc/xdg/xfce4/desktop/menu2.xml. /etc/xdg/xfce4/desktop/menu2.xml; then ok; else fail; fi
+	fi
+	if is_yes "$FVWM2" && [ -f /etc/X11/fvwm2/fvwm2.menu2 ]; then
+			show "Regenerating FVWM2 menu"; busy
+			if vfmg fvwm2 > /etc/X11/fvwm2/fvwm2.menu2. 2>/dev/null \
+				&& mv -f /etc/X11/fvwm2/fvwm2.menu2. /etc/X11/fvwm2/fvwm2.menu2; then ok; else fail; fi
+	fi
+	if is_yes "$FVWM" && [ -f /etc/X11/fvwm/fvwm.menu ]; then
+			show "Regenerating FVWM menu"; busy
+			if vfmg fvwm > /etc/X11/fvwm/fvwm.menu. 2>/dev/null \
+				&& mv -f /etc/X11/fvwm/fvwm.menu. /etc/X11/fvwm/fvwm.menu; then ok; else fail; fi
+	fi
+	touch /var/lock/subsys/vfmg
+	;;
+  stop)
+	rm -f /var/lock/subsys/vfmg
+	;;
+  status)
+	;;
+  *)
+	msg_usage "$0 {start|stop|restart|reload|force-reload|status}"
+	exit 3
+esac
+
+exit 0

Added: vfmg/vfmg.sysconfig
==============================================================================
--- (empty file)
+++ vfmg/vfmg.sysconfig	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,13 @@
+# Here you can choose which windowmanagers will have regenerated menu
+# with vfmg.init
+
+XFCE4="yes"
+FLUXBOX="yes"
+FVWM2="yes"
+FVWM="yes"
+
+# export VFMG_TERM="aterm -name xterm-%1 -e %2"
+# export LANG=pl_PL
+
+# This must be last line !
+# vi:syntax=sh:tw=78:ts=8:sw=4

Added: vfmg/vfmgrc
==============================================================================
--- (empty file)
+++ vfmg/vfmgrc	Sat Dec  2 04:19:43 2006
@@ -0,0 +1,307 @@
+# vfmg config
+# $Id: vfmgrc,v 1.17 2006/12/01 22:24:03 sparky Exp $
+
+# avaible options:
+#exec	= 0/1
+#exec_full	= 0/1
+#icons	= 0/1
+#icons_ext	= 0/1
+#icons_full	= 0/1
+#icons_scale	= 0/1
+#icons_fork	= 0/1
+#icons_dir	= string
+#icons_oext	= string
+#utf	= 0/1
+#encoding	= string
+#clear	= 0/1
+#promote	= 0/1
+#strip	= 0/1
+#nomenu	= 0/1
+# terminal used for terminal applications, see terminal list at final
+#xterm	= string
+#convert	= string
+#full_regen	= 0/1
+#destdir	= string
+
+# DR17 specific:
+#
+# class and name terminal application will have, you should allways specify both
+#termapp_class	= string
+#termapp_name	= string
+#
+# application to prepare not existing icons,
+# - %1 will be changed to application name string
+# - %in is xpm 1x1 blank icon
+# - %out is output icon
+#text_icon	= string
+# 
+# file with window class/name/title:
+#wcnt_file	= string
+
+##### general configuration #####
+# check for executables:
+#exec	= 1
+# full path to executables:
+#exec_full	= 1
+
+icons	= 1
+icons_oext	= png
+
+# "faster" menu generation if icons are scaled, but some WMs checks
+# only once for icons existance
+#icons_fork	= 1
+
+# mose WMs require locale encoding
+utf	= 0
+encoding	=
+
+# much nicer menu
+#promote	= 1
+# still nice, allways cleared if promote
+clear	= 1
+
+# terminal exemples
+#xterm	= Eterm --title 'Eterm: %1' --exec %2
+#xterm	= xterm -title 'xterm: %1' -e %2
+#xterm	= gnome-terminal --title='gnome-terminal: %1' --execute %2
+
+#should be setup per WM:
+#icons_dir
+#destdir
+#convert
+#full_regen
+#strip
+
+
+##### per-WM configuration #####
+
+[DR17]	# Enlightenment DR17
+# requires icons scaling
+# realy it can scale icons, but we need to unify them
+icons_scale	= 1
+# DR17 uses png for everything
+icons_oext	= png
+# conflicts with icons_fork
+icons_fork	= 0
+# icons may be large, as DR17 can scale them
+convert	= convert -geometry 64x64 %in %out
+# should be stripped
+strip	= 1
+
+# difectory to enlightenments special icons (*.eap)
+icons_dir	= ${HOME}/.e/e/applications/all
+# difectory to menu structure
+destdir	= ${HOME}/.e/e/applications/favorite
+
+# DR17 can handle UTF8, and prefers it over locale encoding
+utf	= 1
+
+# example, this way terminal applications will get correct icon
+xterm	= Eterm --name Eterm-%1 --exec %2
+# Eterm class is always Eterm, and can't be changed
+termapp_class	= Eterm
+# window name we just gave
+termapp_name	= Eterm-%1
+
+# prepare text icon using vera fonts
+text_icon	= convert -scale 64x64 -annotate 0,0,2,38 %1 \
+	  -font /usr/share/fonts/TTF/VeraBd.ttf -pointsize 24 \
+	  %in %out
+
+# wcnt stands for Window Class Name Tittle
+# DR17 can use those for identyfying window with application and assign
+# it an icon
+# vfmg by default uses as windows class binary name changing first letter to upper
+# case, but it's not correct in many cases
+wcnt_file	= /usr/share/enlightenmentDR17/wcnt.txt;${HOME}/.e/wcnt.txt
+
+
+[blackbox]
+icons	= 0
+icons_full	= 0
+exec	= 1
+exec_full	= 1
+strip	= 1
+
+
+[e16]	# Enlightenment DR16, e16 (version >= 0.16.8)
+# enlightenment is not scaling icons, and we want it
+icons_scale	= 1
+# default icons dir in enlightenment
+icons_dir	= ${HOME}/.e16/icons
+# enli default, good geometry fo most themes
+convert	= convert -geometry 18x18 %in %out
+# most people use Eterm in enlightenment
+#xterm	= Eterm --name %1 --exec %2
+# should be stripped
+strip	= 1
+
+
+[enlightenment]	# Enlightenment DR16
+# enlightenment is not scaling icons, and we want it
+icons_scale	= 1
+# default icons dir in enlightenment
+icons_dir	= ${HOME}/.enlightenment/icons
+# enli default, good geometry fo most themes
+convert	= convert -geometry 18x18 %in %out
+# most people use Eterm in enlightenment
+#xterm	= Eterm --name %1 --exec %2
+# should be stripped
+strip	= 1
+
+
+[fbpanel]
+# requires full path to icons, but no need to strip
+icons_full	= 1
+# requires utf-8
+utf	= 1
+# should be stripped
+strip	= 1
+
+
+[fluxbox]
+icons	= 0
+icons_full	= 0
+exec	= 1
+exec_full	= 1
+strip	= 1
+
+
+[fvwm]
+exec	= 1
+exec_full	= 1
+# no icons support
+icons	= 0
+icons_full	= 0
+icons_scale	= 0
+# must be unstripped
+strip	= 0
+
+
+[fvwm2]
+# requires icons scaling
+icons	= 1
+icons_scale	= 1
+# requires directory for icons (no standart dir)
+#icons_dir	= ${HOME}/.icons/fvwm2
+# better when using startup generated menu
+# warning: vfmg is not checking read permissions
+#icons_dir	= /var/cache/icons
+# geometry found in wm-icons
+convert	= convert -geometry 21x18 %in %out
+# must be unstripped
+strip	= 0
+
+
+[icewm]
+# icewm.spec: vfmg -i -f -x -c -s icewm
+icons	= 1
+icons_full	= 1
+icons_scale	= 0
+exec	= 1
+exec_full	= 1
+strip	= 1
+
+
+[metisse]
+# metisse is not scaling icons, and we want them
+icons_scale	= 1
+# iconsdir proposed by sparky
+icons_dir	= ${HOME}/.fvwm-metisse/icons
+# geometry found in wm-icons
+convert	= convert -geometry 21x18 %in %out
+# must be unstripped
+strip	= 0
+
+
+[openbox]
+# no icons support
+icons	= 0
+icons_full	= 0
+icons_scale	= 0
+# requires utf-8
+utf	= 1
+# strip depends how you use it
+#strip	= 1
+
+
+[qvwm]
+# requires icons scaling
+icons_scale	= 1
+# requires directory for icons (no standart dir)
+icons_dir	= ${HOME}/.icons/qvwm
+# qvwm uses xpm, but png works too
+icons_oext	= xpm
+# geometry like in *.xpm icons
+convert	= convert -geometry 16x16 %in %out
+#should be unstripped
+strip	= 0
+
+
+[wmaker-old]
+# WindowMaker-vfmg.patch: vfmg -u -i -f -x -c wmaker-old
+icons	= 0
+exec	= 1
+exec_full	= 1
+utf	= 1
+strip	= 0
+
+
+[wmii]
+# no icons support
+icons	= 0
+icons_full	= 0
+icons_scale	= 0
+# should be stripped
+strip	= 1
+
+
+[xfce4]
+# vfmg.init used: vfmg -f -x -c -u -m xfce4
+exec	= 1
+exec_full	= 1
+utf	= 1
+nomenu	= 1
+strip	= 0
+
+
+### TERMINAL information ###
+[terminals] # will be skipped, so no comment required
+
+#terminal_name: class: "default class": how to change it
+#	name:  "default name": how to change it
+#	exec:  how to execute some application
+
+Eterm:	class: "Eterm": can't be changed
+	name:  "Eterm": --name
+	exec:  --exec
+
+Terminal:	class: "Terminal": can't be changed
+	name:  "Terminal": can't be changed
+	exec:  --command
+
+aterm:	class: "XTerm": can't be changed
+	name:  "aterm": -name
+	exec:  -e
+
+gnome-terminal:	class: "Gnome-terminal": --class
+	name:  "gnome-terminal": --name ? (it's not working)
+	exec:  --command
+
+mrxvt:	class: "XTerm": can't be changed
+	name:  "mrxvt": -name
+	exec:  -e
+
+rxvt:	class: "XTerm": can't be changed
+	name:  "rxvt": -name
+	exec:  -e
+
+urxvt:	class: "URxvt": can't be changed
+	name:  "urxvt": -name
+	exec:  -e
+
+xterm:	class: "XTerm": -class
+	name:  "xterm": -name
+	exec:  -e
+
+# vim: ts=16


More information about the pld-cvs-commit mailing list