summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinrich Wendel <h_wendel@cojobo.net>2005-06-06 16:26:12 +0000
committerHeinrich Wendel <h_wendel@cojobo.net>2005-06-06 16:26:12 +0000
commit971075a5f76086b81d660295453abeb84b95cad4 (patch)
treef1fff54d16594387b1b67c1a77c48491268221e5
parent6eed0f10efe9abe80333821af019444e36b2b5a1 (diff)
add support for <deleted/> and pretty output
-rw-r--r--xdg/MenuEditor.py46
1 files changed, 43 insertions, 3 deletions
diff --git a/xdg/MenuEditor.py b/xdg/MenuEditor.py
index 4e2df56..1057811 100644
--- a/xdg/MenuEditor.py
+++ b/xdg/MenuEditor.py
@@ -8,6 +8,7 @@ from xdg.Config import *
import xml.dom.minidom
import os
+import re
# XML-Cleanups: Move / Exclude
# FIXME: proper reverte/delete
@@ -54,6 +55,8 @@ class MenuEditor:
except xml.parsers.expat.ExpatError:
raise ParsingError('Not a valid .menu file', self.filename)
+ self.__remove_whilespace_nodes(self.doc)
+
def save(self):
self.__saveEntries(self.menu)
self.__saveMenu()
@@ -121,7 +124,7 @@ class MenuEditor:
return separator
- def editMenuEntry(self, menuentry, name=None, genericname=None, comment=None, command=None, icon=None, terminal=None, nodisplay=None):
+ def editMenuEntry(self, menuentry, name=None, genericname=None, comment=None, command=None, icon=None, terminal=None, nodisplay=None, hidden=None):
deskentry = menuentry.DesktopEntry
if name:
@@ -151,6 +154,11 @@ class MenuEditor:
elif nodisplay == False:
deskentry.set("NoDisplay", "false")
+ if hidden == True:
+ deskentry.set("Hidden", "true")
+ elif hidden == False:
+ deskentry.set("Hidden", "false")
+
menuentry.updateAttributes()
if len(menuentry.Parents) > 0:
@@ -158,7 +166,7 @@ class MenuEditor:
return menuentry
- def editMenu(self, menu, name=None, genericname=None, comment=None, icon=None, nodisplay=None):
+ def editMenu(self, menu, name=None, genericname=None, comment=None, icon=None, nodisplay=None, hidden=None):
# Hack for legacy dirs
if isinstance(menu.Directory, MenuEntry) and menu.Directory.Filename == ".directory":
xml_menu = self.__getXmlMenu(menu.getPath(True, True))
@@ -197,6 +205,11 @@ class MenuEditor:
elif nodisplay == False:
deskentry.set("NoDisplay", "false")
+ if hidden == True:
+ deskentry.set("Hidden", "true")
+ elif hidden == False:
+ deskentry.set("Hidden", "false")
+
menu.Directory.updateAttributes()
if isinstance(menu.Parent, Menu):
@@ -204,6 +217,21 @@ class MenuEditor:
return menu
+ def hideMenuEntry(self, menuentry):
+ self.editMenuEntry(menuentry, nodisplay = True)
+
+ def unhideMenuEntry(self, menuentry):
+ self.editMenuEntry(menuentry, nodisplay = False, hidden = False)
+
+ def hideMenu(self, menu):
+ self.editMenu(menu, nodisplay = True)
+
+ def unhideMenu(self, menu):
+ self.editMenu(menu, nodisplay = False, hidden = False)
+ xml_menu = self.getXmlMenu(menu.getPath(True,True), False)
+ for node in self.getXmlNodesByName(["Deleted", "NotDeleted"]):
+ node.parentNode.removeChild(node)
+
def deleteMenuEntry(self, menuentry):
if self.getAction(menuentry) == "delete":
self.__deleteFile(menuentry.DesktopEntry.filename)
@@ -284,7 +312,7 @@ class MenuEditor:
if not os.path.isdir(os.path.dirname(self.filename)):
os.makedirs(os.path.dirname(self.filename))
fd = open(self.filename, 'w')
- fd.write(self.doc.toxml().replace('<?xml version="1.0" ?>\n', ''))
+ fd.write(re.sub("\n[\s]*([^\n<]*)\n[\s]*</", "\\1</", self.doc.toprettyxml().replace('<?xml version="1.0" ?>\n', '')))
fd.close()
def __getFileName(self, name, extension):
@@ -462,3 +490,15 @@ class MenuEditor:
self.filenames.remove(filename)
except ValueError:
pass
+
+ def __remove_whilespace_nodes(node):
+ remove_list = []
+ for child in node.childNodes:
+ if child.nodeType == xml.dom.minidom.Node.TEXT_NODE:
+ child.data = child.data.strip()
+ if not child.data.strip():
+ remove_list.append(child)
+ elif child.hasChildNodes():
+ remove_whilespace_nodes(child)
+ for node in remove_list:
+ node.parentNode.removeChild(node)