作者 icewm-menu-xdg.py [actionscript] 2007-03-29 21:36 (点击下载)

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. # Author: Huang Jiahua <jhuangjiahua(at)gmail.com>
  4. # License: GNU LGPL
  5. # Last modified:
  6.  
  7. """Generates FreeDesktop application menu for IceWM window manager
  8. Requires python-xdg
  9. """
  10. __revision__ = '0.1'
  11.  
  12.  
  13. import sys
  14. reload(sys)
  15. sys.setdefaultencoding('utf8')
  16. import os
  17. import locale
  18. import getopt
  19. import re
  20. import xdg.Menu
  21. import xdg.DesktopEntry
  22. import xdg.IconTheme
  23. import xdg.Config
  24.  
  25.  
  26. terminal = "x-terminal-emulator -e %s"
  27. default_folder_icon = "folder"
  28. default_entry_icon = "xlogo"
  29. entire_menu = False
  30. #with_theme_paths = False
  31. with_theme_paths = True
  32. icon_size = 16
  33.  
  34. exec_clean1_re = re.compile(r'%[a-zA-Z]')
  35. exec_clean2_re = re.compile(r'%%')
  36. encoding = "UTF-8"
  37. locale_str = "zh_CN.UTF-8"
  38.  
  39. def find_icon(entry):
  40. icon = entry.getIcon()
  41. if icon and with_theme_paths:
  42. icon = xdg.IconTheme.getIconPath(icon, icon_size)
  43. return icon
  44.  
  45.  
  46. menustr = []
  47. def process_menu(menu):
  48. global menustr
  49. for entry in menu.getEntries():
  50. if isinstance(entry, xdg.Menu.Menu):
  51. name = entry.getName() or entry.DesktopFileID
  52. icon = find_icon(entry) or default_folder_icon
  53. menustr.append(("menu \"%s\" \"%s\" {" % (name, icon)).encode(encoding))
  54. process_menu(entry)
  55. menustr.append("}\n")
  56.  
  57. elif isinstance(entry, xdg.Menu.MenuEntry):
  58. de = entry.DesktopEntry
  59. name = de.getName() or entry.DesktopFileID
  60. icon = find_icon(de) or default_entry_icon
  61. execute = exec_clean2_re.sub('%', exec_clean1_re.sub('', de.getExec()))
  62. if de.getTerminal(): execute = terminal % execute
  63. menustr.append((" prog \"%s\" \"%s\" %s\n" % (name, icon, execute)).encode(encoding))
  64.  
  65.  
  66.  
  67.  
  68.  
  69. def main():
  70. global menustr
  71.  
  72. homedir = os.environ['HOME']
  73. icewmdir = os.path.join(homedir,'.icewm')
  74. menufile = os.path.join(icewmdir,'menu')
  75. if not os.path.isdir(icewmdir): os.mkdir(icewmdir)
  76.  
  77. encoding = locale.getlocale()[1] or 'UTF-8'
  78. menu = xdg.Menu.parse()
  79. process_menu(menu)
  80. menus = "".join(menustr)
  81. file(menufile,'w').write(menus)
  82. print menustr
  83.  
  84. if __name__=="__main__":
  85. main()
  86.  
  87.  
  88.  

下面的修改已经提交:
提交下面的校正或者修改. (点击这里开始一个新的帖子)
姓名: 在 cookie 中记住我的名字

屏幕抓图:(jpeg 或 png)