#!/usr/bin/perl #Stand: 10.0.2000 #(c) by T.Mueller #http://www.sirtobi.com/stud/toice/ # This program can convert Gnome-menues to icewm-menues. # Just use it like ./gno2ice.pl >programs ######################################### # This is the Path to your Gnome-Menu $PFAD="$ENV{GNOMEDIR}/share/gnome/apps"; if($PFAD eq "/share/gnome/apps") { $PFAD="/usr/share/gnome/apps"; } $MYPFAD="$ENV{HOME}/.gnome/apps"; # This is your country code, use "" for don`t know ! @LAENDER=split("_",$ENV{LANG}); $LAND=@LAENDER[0]; # This is the maximal length of menue-entrys. If it is to long, icewm will fail to show it. $MAXCOMMENT=30; ################################## Nothing to change here ########################################### if( -e $PFAD) { GetFiles($PFAD,""); } if( -e $MYPFAD) { GetFiles($MYPFAD,""); } sub GetFiles { my $PFAD=@_[0]; # Uerbegabevariablen abfangen my $TABU=@_[1]; my $ENTRY; my $DirPos; if ( -r join("",$PFAD,"/.directory")) { open(DIRPREF,join("","<",$PFAD,"/.directory")) || die "Can`t open $PFAD/.directory"; do { @PREFS=readline ; } until(eof); close(DIRPREF); $COMMENT=""; $ICON=""; foreach $ENTRY(@PREFS) { @ENTRYS=split("=",$ENTRY); if(lc(@ENTRYS[0]) eq "name") { if($COMMENT eq "") { $COMMENT=@ENTRYS[1]; } } if(lc(@ENTRYS[0]) eq "name[$LAND]") { $COMMENT=@ENTRYS[1]; } if(lc(@ENTRYS[0]) eq "icon") { $ICON=@ENTRYS[1]; @ICONS=split('\.',$ICON); $ICON=@ICONS[0]; } } if($COMMENT eq "") { $COMMENT="No Name"; } else { @COMMENTS=split(chr(10),$COMMENT); $COMMENT=@COMMENTS[0]; } if($ICON eq "") { $ICON="NoIcon"; } $COMMENT=substr $COMMENT,0,$MAXCOMMENT; } else { $COMMENT="$PFAD"; $ICON="$PFAD"; } if($TABU eq "") { $ICON="GNOME"; } printf "$TABU"; printf "menu \"$COMMENT\" \"$ICON\" {\n"; $TABU=join("",$TABU," "); opendir(DIR, $PFAD) || die "Error opening $PFAD: $!"; # Verzeichnis einlesen do { $ENTRY=readdir DIR; if($ENTRY ne '.' & $ENTRY ne '..' & $ENTRY ne '') # Systemverzeichnisse rausschmeissen { if(-d "$PFAD/$ENTRY") # Verzeichnisse rekursiv beackern { $DirPos=telldir DIR; closedir DIR; GetFiles("$PFAD/$ENTRY",join("",$TABU," ")); opendir(DIR, $PFAD) || die "Error opening $PFAD: $!"; seekdir DIR,$DirPos; } else { @ENTRYS=split('\.',$ENTRY); if(@ENTRYS[1] eq "desktop") { open(PREF,join("","<",$PFAD,"/$ENTRY")) || die "Can`t open $PFAD/$ENTRY"; do { @PREFS=readline ; } until(eof); close(PREF); $EXEC=""; $COMMENT=""; $ICON=""; foreach $ENTRY(@PREFS) { @ENTRYS=split("=",$ENTRY); if(lc(@ENTRYS[0]) eq "exec") { $EXEC=@ENTRYS[1]; } if(lc(@ENTRYS[0]) eq "name") { if($COMMENT eq "") { $COMMENT=@ENTRYS[1]; } } if(lc(@ENTRYS[0]) eq "name[$LAND]") { $COMMENT=@ENTRYS[1]; } if(lc(@ENTRYS[0]) eq "icon") { $ICON=@ENTRYS[1]; @ICONS=split('\.',$ICON); $ICON=@ICONS[0]; } } if($COMMENT eq "") { $COMMENT="No Name"; } else { @COMMENTS=split(chr(10),$COMMENT); $COMMENT=@COMMENTS[0]; } if($ICON eq "") { $ICON="NoIcon"; } if($ICON eq chr(10)) { $ICON="NoIcon"; } $COMMENT=substr $COMMENT,0,$MAXCOMMENT; if($EXEC ne "") { printf "$TABU"; printf "prog \"$COMMENT\" \"$ICON\" $EXEC \n"; } } } } } until( $ENTRY eq ""); closedir DIR; printf "}\n"; }