diff options
author | Aaron LI <aaronly.me@gmail.com> | 2016-01-09 22:55:10 +0800 |
---|---|---|
committer | Aaron LI <aaronly.me@gmail.com> | 2016-01-09 22:56:25 +0800 |
commit | 17c23577b823bced60ff0673d31611a1c7738fdd (patch) | |
tree | b68e55dfb540f932b341461620e676dcf223f6c5 /_config/openbox/scripts | |
parent | 53760f8b41e19bfd2ef426dd32caf9055711c79a (diff) | |
download | dotfiles-17c23577b823bced60ff0673d31611a1c7738fdd.tar.bz2 |
Rewrite openbox menu.xml; small update to rc.xml
Diffstat (limited to '_config/openbox/scripts')
-rwxr-xr-x | _config/openbox/scripts/pipemenu-places | 102 | ||||
-rwxr-xr-x | _config/openbox/scripts/xdg-menu | 98 |
2 files changed, 151 insertions, 49 deletions
diff --git a/_config/openbox/scripts/pipemenu-places b/_config/openbox/scripts/pipemenu-places new file mode 100755 index 0000000..812eb27 --- /dev/null +++ b/_config/openbox/scripts/pipemenu-places @@ -0,0 +1,102 @@ +#!/usr/bin/env perl +# Recursively browse filesystem through openbox3 pipe menus +#### Usage: add +# <menu id="browse" label="Browse" execute="obpipemenu-places ~" /> +# 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 = "thunar"; + +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 "<openbox_pipe_menu>\n"; + + # "Browse here..." lauches this dir + print "<item label=\"Browse here..\">". + "\n\t<action name=\"Execute\">". + "\n\t\t<execute>$cmd '$path'</execute>". + "\n\t</action>". + "\n</item>\n". + "<separator />"; + + 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 "</openbox_pipe_menu>\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 "<menu id=\"$path/$name\" label=\"$name\" execute=\"$0 $path/$name\" />\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 "<menu id=\"$path/$name\" label=\"$name\" execute=\"$0 $path/$name\" />\n"; +=cut + return "<item label=\"$name\">". + "\n\t<action name=\"Execute\">". + "\n\t\t<execute>$cmd '$path/$name'</execute>". + "\n\t</action>" + . "\n</item>\n"; +=cut +} + +sub mk_file_element { + my ($path, $name) = @_; + my $label = $name; + # escape ampersand in pathnames + $path =~ s/&/&/g; + $name =~ s/&/&/g; + + return "<item label=\"$name\">". + "\n\t<action name=\"Execute\">". + "\n\t\t<execute>$cmd '$path/$name'</execute>". + "\n\t</action>" + . "\n</item>\n"; +} + diff --git a/_config/openbox/scripts/xdg-menu b/_config/openbox/scripts/xdg-menu index 05d6cec..0a8c1bc 100755 --- a/_config/openbox/scripts/xdg-menu +++ b/_config/openbox/scripts/xdg-menu @@ -1,49 +1,49 @@ -#!/usr/bin/env python
-#
-# Copyright (C) 2008 Red Hat, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Author(s): Luke Macken <lmacken@redhat.com>
-# Miroslav Lichvar <mlichvar@redhat.com>
-
-
-import gmenu, re, sys
-from xml.sax.saxutils import escape
-
-def walk_menu(entry):
- if entry.get_type() == gmenu.TYPE_DIRECTORY:
- print '<menu id="%s" label="%s">' \
- % (escape(entry.menu_id), escape(entry.get_name()))
- map(walk_menu, entry.get_contents())
- print '</menu>'
- elif entry.get_type() == gmenu.TYPE_ENTRY and not entry.is_excluded:
- print ' <item label="%s">' % escape(entry.get_name())
- command = re.sub(' [^ ]*%[fFuUdDnNickvm]', '', entry.get_exec())
- if entry.launch_in_terminal:
- command = 'xterm -title "%s" -e %s' % \
- (entry.get_name(), command)
- print ' <action name="Execute">' + \
- '<command>%s</command></action>' % escape(command)
- print ' </item>'
-
-if len(sys.argv) > 1:
- menu = sys.argv[1] + '.menu'
-else:
- menu = 'applications.menu'
-
-print '<?xml version="1.0" encoding="UTF-8"?>'
-print '<openbox_pipe_menu>'
-map(walk_menu, gmenu.lookup_tree(menu).root.get_contents())
-print '</openbox_pipe_menu>'
+#!/usr/bin/env python +# +# Copyright (C) 2008 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Author(s): Luke Macken <lmacken@redhat.com> +# Miroslav Lichvar <mlichvar@redhat.com> + + +import gmenu, re, sys +from xml.sax.saxutils import escape + +def walk_menu(entry): + if entry.get_type() == gmenu.TYPE_DIRECTORY: + print '<menu id="%s" label="%s">' \ + % (escape(entry.menu_id), escape(entry.get_name())) + map(walk_menu, entry.get_contents()) + print '</menu>' + elif entry.get_type() == gmenu.TYPE_ENTRY and not entry.is_excluded: + print ' <item label="%s">' % escape(entry.get_name()) + command = re.sub(' [^ ]*%[fFuUdDnNickvm]', '', entry.get_exec()) + if entry.launch_in_terminal: + command = 'xterm -title "%s" -e %s' % \ + (entry.get_name(), command) + print ' <action name="Execute">' + \ + '<command>%s</command></action>' % escape(command) + print ' </item>' + +if len(sys.argv) > 1: + menu = sys.argv[1] + '.menu' +else: + menu = 'applications.menu' + +print '<?xml version="1.0" encoding="UTF-8"?>' +print '<openbox_pipe_menu>' +map(walk_menu, gmenu.lookup_tree(menu).root.get_contents()) +print '</openbox_pipe_menu>' |