#!/usr/bin/python
# -*- coding: UTF-8 -*-
# Author: Huang Jiahua <jhuangjiahua(at)gmail.com>
# License: GNU LGPL
# Last modified:
"""Generates FreeDesktop application menu for IceWM window manager
Requires python-xdg
"""
__revision__ = '0.1'
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import os
import locale
import getopt
import re
import xdg.Menu
import xdg.DesktopEntry
import xdg.IconTheme
import xdg.Config
terminal = "x-terminal-emulator -e %s"
default_folder_icon = "folder"
default_entry_icon = "xlogo"
entire_menu = False
#with_theme_paths = False
with_theme_paths = True
icon_size = 16
exec_clean1_re = re.compile(r'%[a-zA-Z]')
exec_clean2_re = re.compile(r'%%')
encoding = "UTF-8"
locale_str = "zh_CN.UTF-8"
def find_icon(entry):
icon = entry.getIcon()
if icon and with_theme_paths:
icon = xdg.IconTheme.getIconPath(icon, icon_size)
return icon
menustr = []
def process_menu(menu):
global menustr
for entry in menu.getEntries():
if isinstance(entry, xdg.Menu.Menu):
name = entry.getName() or entry.DesktopFileID
icon = find_icon(entry) or default_folder_icon
menustr.append(("menu \"%s\" \"%s\" {" % (name, icon)).encode(encoding))
process_menu(entry)
menustr.append("}\n")
elif isinstance(entry, xdg.Menu.MenuEntry):
de = entry.DesktopEntry
name = de.getName() or entry.DesktopFileID
icon = find_icon(de) or default_entry_icon
execute = exec_clean2_re.sub('%', exec_clean1_re.sub('', de.getExec()))
if de.getTerminal(): execute = terminal % execute
menustr.append((" prog \"%s\" \"%s\" %s\n" % (name, icon, execute)).encode(encoding))
def main():
global menustr
homedir = os.environ['HOME']
icewmdir = os.path.join(homedir,'.icewm')
menufile = os.path.join(icewmdir,'menu')
if not os.path.isdir(icewmdir): os.mkdir(icewmdir)
encoding = locale.getlocale()[1] or 'UTF-8'
menu = xdg.Menu.parse()
process_menu(menu)
menus = "".join(menustr)
file(menufile,'w').write(menus)
print menustr
if __name__=="__main__":
main()
-