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/&/&/g;
+ s/\"/"/g;
+ s/</</g;
+ s/>/>/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