#!/usr/bin/perl # Recursively browse filesystem through openbox3 pipe menus #### Usage: add # # to your .config/openbox/menu.xml #### CAVEAT #### # This script was hacked on exclusively in stints between the hours of # 4 and 5 in the morning. Quality may have suffered. #### # Script by dircha from ob list on 05/17/04 # suggested improvements by John Russell on 05/17/04 implemented # a year later by Kacper Wysocki. # 05/30/05 - Kacper Wysocki # - opens files with 'rox', which launches appropriate file handler # - hidden directories now stay hidden # - spaces, ampersands in dir- and filenames are escaped # - newlines at each entry to make output a little readable # 06/04/05 - Kacper Wysocki # - use $0 for scriptname # - use $ENV{'HOME'} as default path # - now follows symlinks use strict; # Command to lauch files with my $cmd = "pcmanfm"; my $path = $ARGV[0]; $path = "$ENV{'HOME'}" if $path eq ""; my @files = split /\n/, `ls -1p '$path'`; mk_menu_element($path, @files); sub mk_menu_element { my ($path, @files) = @_; print "\n"; # "Browse here..." lauches this dir print "". "\n\t". "\n\t\t$cmd '$path'". "\n\t". "\n\n". ""; foreach $_ (@files) { my $length = length $_; my $last_c = substr $_, $length - 1, 1; if ($last_c eq "/") { print mk_dir_element($path, substr $_, 0, $length - 1); } elsif ($last_c eq "@") { print mk_sym_element($path, substr $_, 0, $length - 1); } else { print mk_file_element($path, $_); } } print "\n"; } sub mk_dir_element { my ($path, $name) = @_; # escape ampersand and space in pathnames $path =~ s/&/&/g; $name =~ s/&/&/g; $path =~ s/ /\\ /g; $name =~ s/ /\\ /g; return "\n"; } sub mk_sym_element { my ($path, $name) = @_; # escape ampersand in pathnames $path =~ s/&/&/g; $name =~ s/&/&/g; # Follow symlinks instead of opening links in rox. return "\n"; =cut return "". "\n\t". "\n\t\t$cmd '$path/$name'". "\n\t" . "\n\n"; =cut } sub mk_file_element { my ($path, $name) = @_; my $label = $name; # escape ampersand in pathnames $path =~ s/&/&/g; $name =~ s/&/&/g; return "". "\n\t". "\n\t\t$cmd '$path/$name'". "\n\t" . "\n\n"; }