diff --git a/src/xdgmenumaker b/src/xdgmenumaker
index 3dba344..8001d61 100755
--- a/src/xdgmenumaker
+++ b/src/xdgmenumaker
@@ -19,14 +19,16 @@ pygtkcompat.enable()
pygtkcompat.enable_gtk(version='3.0')
import gtk
-seticon = False
-iconsize = 16
-nosvg = False
-desktop = False
-submenu = True
-pekwmdynamic = False
-twmtitles = False
-max_icon_size = False
+xopts = {
+ 'seticon': False,
+ 'iconsize': 16,
+ 'nosvg': False,
+ 'desktop': False,
+ 'submenu': True,
+ 'pekwmdynamic': False,
+ 'twmtitles': False,
+ 'max_icon_size': False
+}
# the following line gets changed by the Makefile. If it is set to
# 'not_set' it looks in the currect directory tree for the .directory
@@ -154,14 +156,7 @@ if not terminal_app:
def main(argv):
- global desktop
- global seticon
- global iconsize
- global nosvg
- global submenu
- global pekwmdynamic
- global twmtitles
- global max_icon_size
+ global xopts
try:
opts, args = getopt.getopt(argv, "hins:f:", ["help", "icons",
"no-submenu",
@@ -179,19 +174,19 @@ def main(argv):
usage()
sys.exit(0)
elif opt in ("-i", "--icons"):
- seticon = True
+ xopts['seticon'] = True
elif opt in ("-s", "--size"):
try:
- iconsize = int(arg)
+ xopts['iconsize'] = int(arg)
except ValueError:
usage()
sys.exit('ERROR: size must be a number')
elif opt in ("-n", "--no-submenu"):
- submenu = False
+ xopts['submenu'] = False
elif opt in ("--pekwm-dynamic",):
- pekwmdynamic = True
+ xopts['pekwmdynamic'] = True
elif opt in ("--twm-titles",):
- twmtitles = True
+ xopts['twmtitles'] = True
elif opt in ("--max-icon-size",):
try:
# Pillow is optional and loaded only if we want to restrict the
@@ -202,38 +197,38 @@ def main(argv):
# slows down when it is actually needed.
global Image
from PIL import Image
- max_icon_size = True
+ xopts['max_icon_size'] = True
except ImportError:
usage()
sys.exit('ERROR: --max-icon-size requires Pillow')
elif opt == "--no-svg":
- nosvg = True
+ xopts['nosvg'] = True
elif opt in ("-f", "--format"):
- desktop = arg
- if not desktop:
+ xopts['desktop'] = arg
+ if not xopts['desktop']:
usage()
sys.exit('ERROR: You must specify the output format with -f')
- elif desktop == "blackbox":
+ elif xopts['desktop'] == "blackbox":
blackbox()
- elif desktop == "fluxbox":
+ elif xopts['desktop'] == "fluxbox":
fluxbox()
- elif desktop == "fvwm":
+ elif xopts['desktop'] == "fvwm":
fvwm()
- elif desktop == "windowmaker":
- seticon = False
+ elif xopts['desktop'] == "windowmaker":
+ xopts['seticon'] = False
windowmaker()
- elif desktop == "icewm":
+ elif xopts['desktop'] == "icewm":
icewm()
- elif desktop == "pekwm":
+ elif xopts['desktop'] == "pekwm":
pekwmmenu()
- elif desktop == "jwm":
+ elif xopts['desktop'] == "jwm":
jwm()
- elif desktop == "compizboxmenu":
+ elif xopts['desktop'] == "compizboxmenu":
compizboxmenu()
- elif desktop == "twm":
+ elif xopts['desktop'] == "twm":
twm()
- elif desktop == "amiwm":
- seticon = False
+ elif xopts['desktop'] == "amiwm":
+ xopts['seticon'] = False
amiwm()
else:
usage()
@@ -283,7 +278,7 @@ def icon_max_size(icon):
except:
# if there is any error reading the icon, just discard it
return None
- if img.size[0] <= iconsize:
+ if img.size[0] <= xopts['iconsize']:
return icon
return None
@@ -296,11 +291,11 @@ def icon_full_path(icon):
if os.path.exists(icon):
if ext == ".svg" or ext == ".svgz":
# only jwm and icewm support svg icons
- if (desktop == "jwm" or desktop == "icewm") and not nosvg:
+ if (xopts['desktop'] == "jwm" or xopts['desktop'] == "icewm") and not xopts['nosvg']:
return icon
else:
# icon is not svg
- if max_icon_size:
+ if xopts['max_icon_size']:
return icon_max_size(icon)
else:
return icon
@@ -309,17 +304,17 @@ def icon_full_path(icon):
icon_theme = gtk.icon_theme_get_default()
try:
# JWM and IceWM support svg icons
- if (desktop == "jwm" or desktop == "icewm") and not nosvg:
- icon = icon_theme.lookup_icon(icon, iconsize, gtk.ICON_LOOKUP_FORCE_SVG)
+ if (xopts['desktop'] == "jwm" or xopts['desktop'] == "icewm") and not xopts['nosvg']:
+ icon = icon_theme.lookup_icon(icon, xopts['iconsize'], gtk.ICON_LOOKUP_FORCE_SVG)
# but none of the other WMs does
else:
- icon = icon_theme.lookup_icon(icon, iconsize, gtk.ICON_LOOKUP_NO_SVG)
+ icon = icon_theme.lookup_icon(icon, xopts['iconsize'], gtk.ICON_LOOKUP_NO_SVG)
except AttributeError:
sys.exit('ERROR: You need to run xdgmenumaker inside an X session.')
if icon:
icon = icon.get_filename()
# icon size only matters for non-SVG icons
- if icon and max_icon_size and (ext != ".svg" or ext != ".svgz"):
+ if icon and xopts['max_icon_size'] and (ext != ".svg" or ext != ".svgz"):
icon = icon_max_size(icon)
return icon
@@ -395,14 +390,14 @@ def get_entry_info(desktopfile, ico_paths=True):
# none of the freedesktop registered environments are supported by
# OnlyShowIn but it might be worth using some extra logic here.
# http://standards.freedesktop.org/menu-spec/latest/apb.html
- if (onlyshowin != [] and not (desktop.lower() in (name.lower() for name in onlyshowin))) \
- or (desktop.lower() in (name.lower() for name in notshowin)) \
+ if (onlyshowin != [] and not (xopts['desktop'].lower() in (name.lower() for name in onlyshowin))) \
+ or (xopts['desktop'].lower() in (name.lower() for name in notshowin)) \
or hidden or nodisplay:
return None
name = de.getName().encode('utf-8')
- if seticon:
+ if xopts['seticon']:
icon = de.getIcon()
if ico_paths:
icon = icon_full_path(icon)
@@ -525,15 +520,15 @@ def category_icon(category):
def blackbox():
# Blackbox menus are the same as Fluxbox menus. They just don't support
# icons.
- global seticon
- seticon = False
+ global xopts
+ xopts['seticon'] = False
fluxbox()
def fluxbox():
- if submenu:
+ if xopts['submenu']:
spacing = ' '
- if seticon:
+ if xopts['seticon']:
app_icon = icon_full_path(applications_icon)
if app_icon is None:
@@ -547,7 +542,7 @@ def fluxbox():
for menu_category in menu():
category = menu_category.category
cat_name = category.decode()
- if seticon:
+ if xopts['seticon']:
cat_icon = category_icon(category)
cat_icon = icon_full_path(cat_icon)
if cat_icon:
@@ -575,15 +570,15 @@ def fluxbox():
c=command,
i=icon))
print('{s}[end] # ({c})'.format(s=spacing, c=cat_name))
- if submenu:
+ if xopts['submenu']:
print('[end] # ({})'.format(apps_name))
def fvwm():
- if submenu:
+ if xopts['submenu']:
print('DestroyMenu "xdgmenu"')
print('AddToMenu "xdgmenu"')
- if seticon:
+ if xopts['seticon']:
app_icon = icon_full_path(applications_icon)
if app_icon:
print('+ "{a}%{i}% " Title'.format(a=apps_name, i=app_icon))
@@ -611,7 +606,7 @@ def fvwm():
cat_name = category.decode()
print('DestroyMenu "{}"'.format(cat_name))
print('AddToMenu "{c}"'.format(c=cat_name))
- if seticon:
+ if xopts['seticon']:
cat_icon = category_icon(category)
cat_icon = icon_full_path(cat_icon)
if cat_icon:
@@ -651,9 +646,9 @@ def windowmaker():
def icewm():
- if submenu:
+ if xopts['submenu']:
spacing = ' '
- if seticon:
+ if xopts['seticon']:
app_icon = icon_full_path(applications_icon)
if app_icon is None:
app_icon = "_none_"
@@ -667,7 +662,7 @@ def icewm():
cat_name = category.decode()
cat_icon = category_icon(category)
cat_icon = icon_full_path(cat_icon)
- if seticon and cat_icon is not None:
+ if xopts['seticon'] and cat_icon is not None:
print('{s}menu "{c}" {i} {{'.format(s=spacing, c=cat_name,
i=cat_icon))
else:
@@ -676,26 +671,26 @@ def icewm():
name = app.name.decode()
icon = app.icon
command = app.command
- if seticon and icon is not None:
+ if xopts['seticon'] and icon is not None:
print('{s} prog "{n}" {i} {c}'.format(s=spacing, n=name,
i=icon, c=command))
else:
print('{s} prog "{n}" _none_ {c}'.format(s=spacing, n=name,
c=command))
print('{}}}'.format(spacing))
- if submenu:
+ if xopts['submenu']:
print('}')
def pekwmmenu():
- if pekwmdynamic:
+ if xopts['pekwmdynamic']:
print("Dynamic {")
dspacing = ' '
else:
dspacing = ''
- if submenu:
+ if xopts['submenu']:
spacing = ' '
- if seticon:
+ if xopts['seticon']:
app_icon = icon_full_path(applications_icon)
print('{s}Submenu = "{a}" {{ Icon = "{i}"'.format(s=dspacing,
a=apps_name,
@@ -709,7 +704,7 @@ def pekwmmenu():
cat_name = category.decode()
cat_icon = category_icon(category)
cat_icon = icon_full_path(cat_icon)
- if seticon and cat_icon is not None:
+ if xopts['seticon'] and cat_icon is not None:
print('{d}{s}Submenu = "{c}" {{ Icon = "{i}"'.format(d=dspacing,
s=spacing,
c=cat_name,
@@ -731,7 +726,7 @@ def pekwmmenu():
# with "&&" and "||", so we'll launch the command even if the
# path does not exist
command = 'cd {p} && {c} || {c}'.format(p=path, c=command)
- if seticon and icon is not None:
+ if xopts['seticon'] and icon is not None:
print('{d}{s} Entry = "{n}" {{ Icon = "{i}"; Actions = "Exec {c} &" }}'
.format(d=dspacing, s=spacing, n=name, i=icon,
c=command))
@@ -739,18 +734,18 @@ def pekwmmenu():
print('{d}{s} Entry = "{n}" {{ Actions = "Exec {c} &" }}'
.format(d=dspacing, s=spacing, n=name, c=command))
print('{d}{s}}}'.format(d=dspacing, s=spacing))
- if submenu:
+ if xopts['submenu']:
print('{}}}'.format(dspacing))
- if pekwmdynamic:
+ if xopts['pekwmdynamic']:
print("}")
def jwm():
print('')
print('