From 1160cbdb9dee1441e24b4b474ba51fb43b5925fd Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 9 Mar 1999 16:03:24 +0000 Subject: [PATCH] Update for a missed file in 0.51.2-pre2 --- util/wkdemenu.pl | 236 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 util/wkdemenu.pl diff --git a/util/wkdemenu.pl b/util/wkdemenu.pl new file mode 100644 index 00000000..cd85f620 --- /dev/null +++ b/util/wkdemenu.pl @@ -0,0 +1,236 @@ +#!/usr/bin/perl +# +# +# kde2wmaker.pl: +# +# +# This script, made for users of Window Maker (http://windowmaker.org) is to +# be used along with KDE (http://www.kde.org). +# +# +# The default directory, ~/.kde/share/applnk/apps, will contain various +# sub-directories such as Development, Editors, Internet, etc. If for some +# reason, you wish to use an alternate (parent) directory that contains the +# various AppName.kdelnk files, it can be specified on the command line. +# +# The directory, if an alternate is specified, MUST be a parent directory to +# any/all sub-directories. +# +# Command line usage: +# -d -f -s yes (print to STDOUT) +# +# Example command with args: +# -d ~/.kde/share/applnk -f ~/.kde2wmaker.menu -s yes +# +# When the script is run, it will write out a proper Window Maker "External +# Menu" entry, that can be included in the menu. When the External Menu has +# been correctly configured, the root menu will display a sub-menu containing +# all of the KDE related items found. The script only needs to be run when/if +# KDE is updated. +# +# +# Installation and Configuration: +# +# 1) If /usr/bin/perl is not the location of the perl binary on your system, +# the first line should be changed to reflect upon it's location. +# 2) Run the script. +# 3) Configure Window Maker's menu by editing ~/GNUstep/Defaults/WMRootMenu +# This could be done with any text editor, or by using WPrefs. Insert +# the following line (if done with a text editor) into the WMRootMenu file. +# ("External Menu", OPEN_MENU, "$HOME/.kde2wmaker.menu"), +# If done using WPrefs, simply "Add External Menu" from the drop down menu, +# then type: $HOME/.kde2wmaker.menu into the "Menu Path/Directory List" +# textbox. +# 4) Some KDE entries, such as "Pine" will require a terminal to execute it. +# There is a terminal varable below. You may use any terminal, XTerm is the +# default. Any command line options such as: -fg -bg, etc. can be +# specified in this variable as well. +# +# +# Michael Hokenson - logan@dct.com + + +### +### Variables +### + +### The External Menu file, this should NEVER point to the root menu file +$menufile = "$ENV{'HOME'}/.kde2wmaker.menu"; + +### Base directory, location of all the KDE AppName.kdelnk files +$basedir = "$ENV{'HOME'}/.kde/share/applnk/apps"; + +### Terminal to use +$term = "xterm"; + +### Print to STDOUT, default is YES, a filename is specified +$stdout = 1; + + +### +### Begin work +### + +### Process command line arguments +foreach $arg(@ARGV) { + if($last) { + if($last eq "-d") { + $basedir = $arg; + } elsif($last eq "-f") { + $menufile = $arg; + $stdout = 0; + } + undef($last); + } elsif($arg =~ /^-/) { + if($arg =~ /^-[dfs]$/) { + $last = $arg; + } else { + die("Unknown option: $arg\n\nUsage: kde2wmaker.pl\n\t-d [-f ]\n"); + &Usage; + } + } +} + +### Make sure we actually exist +if(-d $basedir) { + + ### Start some error checking + $errors = 0; + + ### See if there is an old menu file. If there is, rename it + unless($stdout) { + if(-e $menufile) { + print "\tFound $menufile, renaming\n\n"; + rename $menufile, "$menufile.old"; + } + } + + ### Read in the directories + opendir(KDE,$basedir); + @dirs = readdir(KDE); + closedir(KDE); + + ### Make sure there is actually something in $basedir + if($#dirs <= 1) { + print "ERROR:\n\tNothing found in $basedir\n\n"; + exit(0); + } + + ### Begin writing the menu + unless($stdout) { + open(MENUFILE,"> $menufile"); + } + + ### Start the main menu entry + if($stdout) { + print "\t\"KDE Applications\" MENU\n"; + } else { + print MENUFILE "\t\"KDE Applications\" MENU\n"; + } + + ### Begin processing the directories + foreach $dir(@dirs) { + + ### Handle each directory unless if its hidden (starts with .) + unless($dir =~ /^\./) { + ### Print out the sub directories + if($stdout) { + print "\t\t\"$dir\" MENU\n"; + } else { + print MENUFILE "\t\t\"$dir\" MENU\n"; + } + + ### Look in each directory and process individual files + opendir(SUB,"$basedir/$dir"); + @subdirs = readdir(SUB); + closedir(SUB); + + ### Process files in each sub directory + foreach $sub(@subdirs) { + + ### Once again, process all files but those that are hidden + unless($sub =~ /^\./) { + + ### Open the files + open(SUB,"$basedir/$dir/$sub"); + + ### Search through the contents of the file + while($line = ) { + chop($line); + ### Grab the name + if($line =~ /^Name=/) { + $pname = $line; + $pname =~ s/Name=//; + } + ### Grab the command + if($line =~ /^Exec=/) { + $pargs = $line; + $pargs =~ s/Exec=//; + } + ### If Terminal=1, then we need to execute a term + if($line =~ /^Terminal=1$/) { + $pargs = "$term -T \"$pname\" -e $pargs"; + } + } + + close(SUB); + + ### Some error checking on the Name and Exec + if($pname eq "") { + $pname = $sub; + $pname =~ s/\.kdelnk//; + } + if($pargs eq "") { + $error = 1; + $pargs = $sub; + $pargs =~ s/\.kdelnk//; + print "WARNING:\n\tNo Exec for $pname, using $pargs\n"; + } + + ### Begin printing menu items + if($stdout) { + print "\t\t\t\"$pname\" EXEC $pargs\n"; + } else { + print MENUFILE "\t\t\t\"$pname\" EXEC $pargs\n"; + } + } + } + + ### Print the end of the sub menu + if($stdout) { + print "\t\t\"$dir\" END\n"; + } else { + print MENUFILE "\t\t\"$dir\" END\n"; + } + } + } + + ### Finish off the main menu entry + if($stdout) { + print "\t\"KDE Applications\" END\n"; + } else { + print MENUFILE "\t\"KDE Applications\" END\n"; + } + + unless($stdout) { + close(MENUFILE); + } + + ### Yaya! + if($errors) { + print "\n.. Finished. There were errors.\n"; + } +# else { +# print "\n.. Finished.\n"; +# } + + exit(0); +} else { + ### Error out :/ + print "ERROR:\n\t$basedir not found\n\tTry another directory.\n"; + exit(0); +} + +### +### End work :)) +### -- 2.11.4.GIT