Author: sparky
Date: Sat Dec  2 04:29:40 2006
New Revision: 8025

Added:
   vfmg/
   vfmg/branches/
   vfmg/tags/
   vfmg/trunk/
   vfmg/trunk/README
   vfmg/trunk/VFMG/
   vfmg/trunk/VFMG/ASCII_out.pm
   vfmg/trunk/VFMG/DR17_out.pm   (contents, props changed)
   vfmg/trunk/VFMG/aewm_out.pm
   vfmg/trunk/VFMG/afterstep_out.pm
   vfmg/trunk/VFMG/blackbox_out.pm
   vfmg/trunk/VFMG/e16_out.pm
   vfmg/trunk/VFMG/e17-desktop_out.pm
   vfmg/trunk/VFMG/e17-eap_out.pm
   vfmg/trunk/VFMG/enlightenment_out.pm   (contents, props changed)
   vfmg/trunk/VFMG/fbpanel_out.pm
   vfmg/trunk/VFMG/fluxbox_out.pm   (contents, props changed)
   vfmg/trunk/VFMG/fvwm2_out.pm
   vfmg/trunk/VFMG/fvwm_out.pm
   vfmg/trunk/VFMG/icewm_out.pm
   vfmg/trunk/VFMG/metisse_out.pm
   vfmg/trunk/VFMG/olvwm_out.pm
   vfmg/trunk/VFMG/openbox_out.pm
   vfmg/trunk/VFMG/qvwm_out.pm
   vfmg/trunk/VFMG/wmaker-old_out.pm
   vfmg/trunk/VFMG/wmaker_out.pm
   vfmg/trunk/VFMG/wmii_out.pm
   vfmg/trunk/VFMG/xfce4_out.pm
   vfmg/trunk/VFMG/xpde_out.pm
   vfmg/trunk/vfmg   (contents, props changed)
   vfmg/trunk/vfmg.cron
   vfmg/trunk/vfmg.init   (contents, props changed)
   vfmg/trunk/vfmg.sysconfig
   vfmg/trunk/vfmgrc
Log:
- try nr 2, now using branches, tags and trunk


Added: vfmg/trunk/README
==============================================================================
--- (empty file)
+++ vfmg/trunk/README   Sat Dec  2 04:29:40 2006
@@ -0,0 +1,16 @@
+AUTHORS:
+- GoTaR <[EMAIL PROTECTED]>
+- Przemyslaw Iskra <[EMAIL PROTECTED]>
+
+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/trunk/VFMG/ASCII_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/ASCII_out.pm        Sat Dec  2 04:29:40 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)[EMAIL PROTECTED];
+       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/trunk/VFMG/DR17_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/DR17_out.pm Sat Dec  2 04:29:40 2006
@@ -0,0 +1 @@
+link e17-eap_out.pm
\ No newline at end of file

Added: vfmg/trunk/VFMG/aewm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/aewm_out.pm Sat Dec  2 04:29:40 2006
@@ -0,0 +1,28 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub aewm {
+       my ($no, $level)[EMAIL PROTECTED];
+       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/trunk/VFMG/afterstep_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/afterstep_out.pm    Sat Dec  2 04:29:40 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/trunk/VFMG/blackbox_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/blackbox_out.pm     Sat Dec  2 04:29:40 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/trunk/VFMG/e16_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/e16_out.pm  Sat Dec  2 04:29:40 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)[EMAIL PROTECTED];
+       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/trunk/VFMG/e17-desktop_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/e17-desktop_out.pm  Sat Dec  2 04:29:40 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/trunk/VFMG/e17-eap_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/e17-eap_out.pm      Sat Dec  2 04:29:40 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/trunk/VFMG/enlightenment_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/enlightenment_out.pm        Sat Dec  2 04:29:40 2006
@@ -0,0 +1 @@
+link e16_out.pm
\ No newline at end of file

Added: vfmg/trunk/VFMG/fbpanel_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/fbpanel_out.pm      Sat Dec  2 04:29:40 2006
@@ -0,0 +1,36 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub fbpanel {
+       my ($no, $level)[EMAIL PROTECTED];
+       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/trunk/VFMG/fluxbox_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/fluxbox_out.pm      Sat Dec  2 04:29:40 2006
@@ -0,0 +1 @@
+link blackbox_out.pm
\ No newline at end of file

Added: vfmg/trunk/VFMG/fvwm2_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/fvwm2_out.pm        Sat Dec  2 04:29:40 2006
@@ -0,0 +1,33 @@
+package VFMG::Output;
+
+use strict;
+use warnings;
+
+sub fvwm2 {
+       my ($no, $level)[EMAIL PROTECTED];
+       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/trunk/VFMG/fvwm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/fvwm_out.pm Sat Dec  2 04:29:40 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/trunk/VFMG/icewm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/icewm_out.pm        Sat Dec  2 04:29:40 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/trunk/VFMG/metisse_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/metisse_out.pm      Sat Dec  2 04:29:40 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/trunk/VFMG/olvwm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/olvwm_out.pm        Sat Dec  2 04:29:40 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/trunk/VFMG/openbox_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/openbox_out.pm      Sat Dec  2 04:29:40 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/trunk/VFMG/qvwm_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/qvwm_out.pm Sat Dec  2 04:29:40 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/trunk/VFMG/wmaker-old_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/wmaker-old_out.pm   Sat Dec  2 04:29:40 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/trunk/VFMG/wmaker_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/wmaker_out.pm       Sat Dec  2 04:29:40 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/trunk/VFMG/wmii_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/wmii_out.pm Sat Dec  2 04:29:40 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/trunk/VFMG/xfce4_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/xfce4_out.pm        Sat Dec  2 04:29:40 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/trunk/VFMG/xpde_out.pm
==============================================================================
--- (empty file)
+++ vfmg/trunk/VFMG/xpde_out.pm Sat Dec  2 04:29:40 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/trunk/vfmg
==============================================================================
--- (empty file)
+++ vfmg/trunk/vfmg     Sat Dec  2 04:29:40 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/trunk/vfmg.cron
==============================================================================
--- (empty file)
+++ vfmg/trunk/vfmg.cron        Sat Dec  2 04:29:40 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/trunk/vfmg.init
==============================================================================
--- (empty file)
+++ vfmg/trunk/vfmg.init        Sat Dec  2 04:29:40 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 <[EMAIL PROTECTED]> 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/trunk/vfmg.sysconfig
==============================================================================
--- (empty file)
+++ vfmg/trunk/vfmg.sysconfig   Sat Dec  2 04:29:40 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/trunk/vfmgrc
==============================================================================
--- (empty file)
+++ vfmg/trunk/vfmgrc   Sat Dec  2 04:29:40 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
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to