Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/12/2009, à 17:48

btmtrn

{{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Bonjour,

Je suis en train de tester Openbox (sous Ubuntu 9.10 Netbook Remix avec un A.A.O A110) et j'aime bien, mais le problème est que le menu (clic droit sur le bureau) n'affiche pas les applications comme avec GNOME. J'ai cherché et je suis tombé sur cette page (qui concerne Archlinux avec GNOME et Openbox) qui explique qu'il est possible d'avoir des menus « dynamiques », avec la même organisation que sous GNOME et qui sont mis à jour avec les nouveaux logiciels installés.

J'ai suivi la procédure décrite sur le site et j'ai donc ajouté la ligne :

<menu id="xdg-menu" label="Applications" execute="obm-xdg"/>

dans mon fichier menu.xml, mais ça ne fait rien. J'ai bien un menu « Application », mais rien dedans (juste un petit rectangle vide qui bloque un peu le menu).

Tous les paquets nécessaires (dont gnome-menus) sont bien installés, je ne vois pas d'où vient le problème.

Pouvez-vous m'aider ? Merci d'avance !

Dernière modification par btmtrn (Le 21/12/2009, à 21:27)

Hors ligne

#2 Le 19/12/2009, à 18:26

wido

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Bonjour,
tu pourrais nous coller le fichier ~/.config/openbox/menu.xml

Hors ligne

#3 Le 19/12/2009, à 18:28

vincentp010

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Salut,

si tu lance la commande obm-xdg dans un terminal, tu as bien le résultat du menu qui s'affiche?
Tu as bien mis ta ligne au bon endroit, entre les balises

<menu id="root-menu" label="Openbox 3">


</menu>

je suppose que oui vu qu'il affiche l'entrée Applications


Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go

Hors ligne

#4 Le 19/12/2009, à 18:39

btmtrn

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Voilà mon fichier menu.xml :

<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/                 file:///usr/share/openbox/menu.xsd">
	<menu id="root-menu" label="Menu">
		<item label="Exécuter">
			<action name="Execute">
				<execute>
					gmrun
				</execute>
			</action>
		</item>
		<item label="Terminal">
			<action name="Execute">
				<execute>
					x-terminal-emulator
				</execute>
			</action>
		</item>
		<item label="Navigateur">
			<action name="Execute">
				<execute>
					x-www-browser
				</execute>
			</action>
		</item>
		<item label="Gestionnaire de fichiers">
			<action name="Execute">
				<execute>
					nautilus
				</execute>
			</action>
		</item>
		<!-- This requires the presence of the 'menu' package to work -->
		<separator/>
		<menu execute="obm-xdg" id="xdg-menu" label="Applications"/>
		<separator/>
		<item label="ObConf">
			<action name="Execute">
				<execute>
					obconf
				</execute>
			</action>
		</item>
		<item label="ObMenu">
			<action name="Execute">
				<execute>
					obmenu
				</execute>
			</action>
		</item>
		<item label="Reconfigure">
			<action name="Reconfigure"/>
		</item>
		<item label="Restart">
			<action name="Restart"/>
		</item>
		<separator/>
		<item label="Éteindre">
			<action name="Execute">
				<execute>
					shutdown -h now
				</execute>
			</action>
		</item>
		<item label="Redémarrer">
			<action name="Execute">
				<execute>
					shutdown -r now
				</execute>
			</action>
		</item>
	</menu>
</openbox_menu>

Quand je fais obm-xdg dans la console, j'ai cette erreur :

IOError: [Errno 2] No such file or directory: u'/etc/xdg/menus/debian-menu.menu'

Hors ligne

#5 Le 20/12/2009, à 11:00

Baspar

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

De ce que j'en voit, tu ouvre bien le menu "root-menu", puis menu "xdg-menu", tu ferme bien ce dernier, mais le menu "root-menu" n'est pas fermé.
Donc juste avant le commentaire

        <!-- This requires the presence of the 'menu' package to work -->

Ferme le menu en mettant un </menu>

Hors ligne

#6 Le 20/12/2009, à 11:29

vincentp010

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Là tu dit une bêtise, le root-menu est fermé à l'avant dernière ligne.
Non le problème viens de la commande xdg-menu qui donne une erreur.

Tu pourrais essayer de remplacer ton fichier /usr/bin/obm-xdg par le mien en le sauvegardant avant:

sudo mv /usr/bin/obm-xdg /usr/bin/obm-xdg.bak
#!/usr/bin/python -O 
#########################################################################
#  Copyright 2005 Manuel Colmenero 
#
#    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, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
########################################################################
#
# a free desktop menus implementation for openbox
#

import xml.dom.minidom, obxml, os, sys, time

class XdgMenu:
	
	def __init__(self):
		self.name = ""
		self.title = ""
		self.directory = ""
		self.directorydir = ""
		self.directorydirs = []
		self.children = []
		self.parent = None
		self.include = None
		self.exclude = None
		self.lang = None
		self.appdirs = []
		self.items = []
		self.onlyunallocated = False
		self.deleted = False
		self.filename = ""
		
	def _get_node_value(self, node):
		if node.hasChildNodes():
			for n in node.childNodes:
				if n.nodeName == "#text" and n.nodeValue.strip() != "":
					return n.nodeValue.strip()
	
	def _get_root_menu(self, menu):
		child = menu
		while child.parent != None:
			child = child.parent
		return child
		
	def _find_menu(self, name):
		if self.name == name:
			return self
		for c in self.children:
			if c.name == name:
				return c
			else:
				b = c._find_menu(name)
				if b: return b
	
	def merge(self, menu):
		for directory in menu.directorydirs:
			if os.path.isdir(directory):
				self.directorydirs += directory
		self.directory = menu.directory
		self.children += menu.children
	
	def parseInclude(self, node, logic):
		for item in node.childNodes:
			if item.nodeType == 1:
				i = XdgLogic(item.nodeName.upper())
				if item.nodeName.upper() in ("CATEGORY", "FILENAME"):
					i.setCategory(self._get_node_value(item))
				else:
					i = XdgLogic(item.nodeName.upper())
					self.parseInclude(item, i)
				logic.append(i)
	
	def parseXml(self, parent):
		root = self._get_root_menu(self)
		
		for item in parent.childNodes:
			nname = item.nodeName.lower()
			
			if nname == "name":
				self.name = self._get_node_value(item)
				
			elif nname == "directory":
				self.directory = self._get_node_value(item)
			
			elif nname == "directorydir":
				value = self._get_node_value(item)
				if not os.path.isabs(value):
					value = "%s/%s" % (os.path.dirname(self.filename), value)
				if os.path.isdir(value):
					self.directorydirs.append(value)
					
			elif nname == "defaultdirectorydirs":
				env = os.getenv("XDG_DATA_DIRS")
				if env:
					for item in env.split(":"):
						if os.path.isdir(item):
							self.directorydirs.append("%s/desktop-directories"%(item))
				else:
					self.directorydirs.append("/usr/share/desktop-directories")
					self.directorydirs.append("/usr/local/share/desktop-directories")
				
			elif nname == "include":
				self.include = XdgLogic("OR")
				self.parseInclude(item, self.include)
			
			elif nname == "exclude":
				self.exclude = XdgLogic("OR")
				self.parseInclude(item, self.exclude)
			
			elif nname == "onlyunallocated":
				self.onlyunallocated = True
			elif nname == "notonlyunallocated":
				self.onlyunallocated = False
			elif nname == "deleted":
				self.deleted = True
			elif nname == "notdeleted":
				self.deleted = False
				
			elif nname == "mergefile":
				fn = self._get_node_value(item)
				if not os.path.isabs(fn):
					fn = "%s/%s" % (os.path.dirname(self.filename), fn)
				newmenu = XdgMenu()
				newmenu.parseFile(fn)
				m = root._find_menu(newmenu.name)
				if m:
					m.merge(newmenu)
				else:
					newmenu.parent = self
					self.children.append(newmenu)
			
			elif nname == "appdir":
				dr = self._get_node_value(item)
				if not os.path.isabs(dr):
					dr = "%s/%s" % (os.path.dirname(self.filename), dr)
				self.appdirs.append(dr)
				
			elif nname == "defaultappdirs":
				xdg_data_dirs = []
				xdg_env = os.getenv("XDG_DATA_DIRS")
				if xdg_env:
					for item in xdg_env.split(":"):
						if item != "" and os.path.isdir(item):
							xdg_data_dirs.append(item)
				else:
					xdg_data_dirs.append("/usr/share")
					xdg_data_dirs.append("/usr/local/share")
				
				for xdir in xdg_data_dirs:
					if os.path.isdir("%s/applications"%(xdir)):
						self.appdirs.append("%s/applications"%(xdir))
			
			elif nname == "menu":
				newmenu = XdgMenu()
				newmenu.appdirs += self.appdirs
				newmenu.directorydirs += self.directorydirs
				newmenu.filename = self.filename
				newmenu.lang = self.lang
				newmenu.parseXml(item)
				m = root._find_menu(newmenu.name)
				if m:
					m.merge(newmenu)
				else:
					newmenu.parent = self
					self.children.append(newmenu)
							
	def parseFile(self, filename):
		f = open(filename)
		dom = xml.dom.minidom.parseString(f.read())
		f.close()
		self.filename = filename
		self.parseXml(dom.documentElement)
	
	def parseDirectoryFile(self, filename, language):
		title = ""
		accuracy = 0
		
		if language:
			l = language.split(".")[0].split("_")
			if len(l) == 2:
				lang_major = l[0]
				lang_minor = l[1]
			else:
				lang_major = l[0]
				lang_minor = None
		else:
			lang_major = "en"
			lang_minor = None

		for line in open(filename):
			i = line.split("=")[0].lower()
			n = line.find("=")
			if i[0:4] == "name":
				name = line[n+1:]
				if "[" in line[:n]:
					lang = line[:n].split("[")[1].split("]")[0]
				else:
					lang = None

				if lang:
					if lang_major in lang and (title == "" or accuracy < 2):
						title = name
						accuracy = 2
					if lang_minor and lang_major in lang and lang_minor in lang:
						title = name
						accuracy = 3
				elif title == "":
						accuracy = 1
						title = name
		return unicode(title.strip() ,"utf-8")
	
	def parseDesktopFile(self, filename, language):
		title = ""
		exe = ""
		cats = []
		accuracy = 0
		
		if language:
			l = language.split(".")[0].split("_")
			if len(l) == 2:
				lang_major = l[0]
				lang_minor = l[1]
			else:
				lang_major = l[0]
				lang_minor = None
		else:
			lang_major = "en"
			lang_minor = None

		for line in open(filename):
			i = line.split("=")[0].lower()
			n = line.find("=")
			if i[0:4] == "name":
				name = line[n+1:]
				if "[" in line[:n]:
					lang = line[:n].split("[")[1].split("]")[0]
				else:
					lang = None

				if lang:
					if lang_major in lang and (title == "" or accuracy < 2):
						title = name
						accuracy = 2
					if lang_minor and lang_major in lang and lang_minor in lang:
						title = name
						accuracy = 3
				elif title == "":
						accuracy = 1
						title = name

			elif i == "exec":
				exe = ""
				jump = False
				for c in line[n+1:]:
					if not jump:
						if c == "%":
							jump = True
						else:
							exe += c
					else:
						jump = False
			elif i == "categories":
				cats = line[n+1:].strip().split(";")
				if cats[-1] == "":
					cats.pop(-1)
		item = {
			"name": unicode(title.strip() ,"utf-8"),
			"exec": exe.strip(),
			"categories": cats,
			"filename": filename,
			"allocated": False
			}
		return item
	
	def getAllAppdirs(self, l=[]):
		for item in self.children:
			for dr in item.appdirs:
				if not dr in l:
					l.append(dr)
			item.getAllAppdirs(l)
		return l
	
	def loadItems(self):
		data = {}
		appdirs = self.getAllAppdirs([])
		
		for each in appdirs:
			data[each] = []
			for f in os.listdir(each):
				if ".desktop" in f:
					i = self.parseDesktopFile("%s/%s" % (each, f), self.lang)
					data[each].append(i)
		
		self._allocate_items(data)
		self._create_items(data)
		self._get_menus_titles(self.lang)
		
	def _get_menus_titles(self, languaje):
		for item in self.directorydirs:
			fn = "%s/%s" % (item, self.directory)
			if os.path.isfile(fn):
				self.title = self.parseDirectoryFile(fn, languaje)
		if self.title == "":
			self.title = self.name
		for each in self.children:
			each._get_menus_titles(languaje)
	
	def _allocate_items(self, data):
		if self.include:
			for d in self.appdirs:
				for item in data[d]:
					if self.include.evaluate(item["categories"], item["filename"]):
						item["allocated"] = True
		for item in self.children:
			item._allocate_items(data)	
	
	def _create_items(self, data):
		if self.include:
			for d in self.appdirs:
				for item in data[d]:
					if not self.onlyunallocated or self.onlyunallocated and not item["allocated"]:
						if self.include.evaluate(item["categories"], item["filename"]):
							if self.exclude:
								if not self.exclude.evaluate(item["categories"], item["filename"]):
									self.items.append(item)
							else:
								self.items.append(item)
		for item in self.children:
			item._create_items(data)
			
	def _create_obmenu(self, obmenu, root=None):
		if self.parent:
			pid = "xdg-" + self.name
		else:
			pid = root
		
		for child in self.children:
			if len(child.items) > 0 or len(child.children) > 0:
				obmenu.createMenu(pid, child.title, "xdg-" + child.name)
				child._create_obmenu(obmenu, root)
		for item in self.items:
			obmenu.createItem(pid, item["name"], "Execute", item["exec"])
	
class XdgLogic:
	def __init__(self, tipe):
		self.tipe = tipe
		self.items = []
		self.value = False
		self.cat = ""
		
	def append(self, item):
		self.items.append(item)

	def evaluate(self, list, filename):
		
		if self.tipe == "CATEGORY":
			self.value = self.cat in list
			return self.value
		
		if self.tipe == "FILENAME":
			self.value = self.cat == filename
			return self.value
			
		if self.tipe == "NOT":
			self.value = False
			for i in self.items:
				self.value = self.value or not i.evaluate(list, filename)
			return self.value
				
		if self.tipe == "AND":
			self.value = True
			for i in self.items:
				if not i.evaluate(list, filename):
					self.value = False
					return self.value
			return self.value
			
		if self.tipe == "OR":
			self.value = False
			for i in self.items:
				self.value = self.value or i.evaluate(list, filename)
			return self.value
			
		if self.tipe == "ALL":
			self.value = True
			return self.value
			
	def setCategory(self, cat):
		self.cat = cat
		
if __name__ == "__main__":
	
	mnu = XdgMenu()
	
	if os.getenv("LANG") != "":
		mnu.lang = os.getenv("LANG")
	home = os.getenv("HOME")
	
	xdg_cd = os.getenv("XDG_CONFIG_DIRS")
	xdg_ch = os.getenv("XDG_CONFIG_HOME")
	
	if not xdg_ch:
		xdg_ch = "%s/.config" % (home)
	if not xdg_cd:
		xdg_cd = "/etc/xdg"
	
	filename =  ""
	role = None
	
	if os.path.isfile("%s/menus/applications.menu"%(xdg_ch)):
		filename = "%s/menus/applications.menu"%(xdg_ch)
	else:
		for cdir in xdg_cd.split(":"):
			if os.path.isfile("%s/menus/applications.menu"%(cdir)):
				filename = "%s/menus/applications.menu"%(cdir)
				break
	
	for arg in sys.argv[1:]:
		if arg == "--import":
			role = "import"
		elif arg == "-i":
			role = "import"
		elif arg == "--replace":
			role = "replace"
		elif arg == "-r":
			role = "replace"
		else:
			if os.path.isfile(sys.argv[1]):
				filename = sys.argv[1]
	
	mnu.parseFile(filename)
	
	if role in ("replace", "import"):
	
		mnu.loadItems()
		obmenu = obxml.ObMenu()
		obmenu.newMenu()
		
		if role == "replace":
			mnuid = "root-menu"
			mnulb = "Openbox 3"
		else:
			mnuid = "obm-xdg-menus"
			mnulb = "Gnome menus"
		
		
		obmenu.createMenu(None, mnulb, mnuid)
		mnu._create_obmenu(obmenu, mnuid)
		
		if role == "replace":
			obmenu.createMenu(mnuid, "Openbox", "Openbox-Conf-Menu")
			obmenu.createItem("Openbox-Conf-Menu", "Edit preferences", "Execute", "obconf")
			obmenu.createItem("Openbox-Conf-Menu", "Edit menus", "Execute", "obmenu")
			obmenu.createItem("Openbox-Conf-Menu", "Reload prefences", "Reconfigure", "")
			obmenu.createSep("Openbox-Conf-Menu")
			obmenu.createItem("Openbox-Conf-Menu", "Exit", "Exit", "")
			obmenu.createSep(mnuid)
			obmenu.createLink(mnuid, "client-list-menu")
		
			if not os.path.isdir(xdg_ch):
				os.mkdir(xdg_ch)
			if not os.path.isdir("%s/openbox"%(xdg_ch)):
				os.mkdir("%s/openbox"%(xdg_ch))
			if os.path.isfile("%s/openbox/menu.xml"%(xdg_ch)):
				os.rename("%s/openbox/menu.xml"%(xdg_ch), "%s/openbox/menu.xml~"%(xdg_ch))
			obmenu.saveMenu("%s/openbox/menu.xml"%(xdg_ch))
		
		else:
			obmenu.saveMenu("gnome-menus.xml")
		
	else:
	
		cachefile = "%s/.obmxdg.xml" % (home)
		if os.path.isfile(cachefile):
			new = False
			for appdir in mnu.getAllAppdirs():
				if os.path.getmtime(appdir) > os.path.getmtime(cachefile):
					new = True
					break
			if not new:
				cache = open(cachefile)
				print cache.read()
				cache.close()
				sys.exit()
				
		mnu.loadItems()
		obmenu = obxml.ObMenu()
	
		obmenu.newPipe()
		mnu._create_obmenu(obmenu)
		obmenu.saveMenu(cachefile)
		obmenu.printXml()

Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go

Hors ligne

#7 Le 20/12/2009, à 11:29

btmtrn

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Quand j'ajoute </menu> avant le commentaire, j'ai une boîte de dialogue m'indiquant une erreur de syntaxe dans le fichier, et mon menu n'affiche plus que les 4 premiers éléments.

Hors ligne

#8 Le 20/12/2009, à 13:00

vincentp010

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

On a posté en même temps, je sais pas si tu as essayé ma solution.


Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go

Hors ligne

#9 Le 20/12/2009, à 13:12

Kookaburra

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Il faut avoir le paquet 'menu' d'installer :

sudo apt-get install menu menu-xdg

Essaye ça pour voir !

=> Sinon, regardes par là :

http://icculus.org/openbox/index.php/Help:Menus#The_Debian_menu

Il faut coller ça dans ton '~/.config/openbox/menu.xml' pour avoir un menu avec toutes tes applications :

<menu id="Debian"/>

Et tu rajoutes ça à ton '~/.config/openbox/rc.xml' :

<file>/var/lib/openbox/debian-menu.xml</file>
<file>debian-menu.xml</file>

( Entre les entrées <menu> et </menu>, avant l'entrée <file>menu.xml</file> )


wink

Dernière modification par Kookaburra (Le 20/12/2009, à 13:21)


Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...

Hors ligne

#10 Le 20/12/2009, à 13:38

btmtrn

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

vincentp010 > Je n'avais pas le fichier /usr/bin/obm-xdg, j'ai donc copié directement le tien  ; ça ne fonctionne pas.

Kookaburra > ça marche mais ce n'est pas tout à fait la même organisation que le menu de GNOME. Ça me liste pleins d'applications qu'on utilise en console, et il doit manquer des entrées (au moins gnometris).

J'ai aussi un autre problème avec le menu dont j'ai oublié de parler : il n'affiche pas son titre (mais c'est très secondaire).

Hors ligne

#11 Le 20/12/2009, à 18:46

Baspar

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Désole, je n'avais pas vu que xdg-menu se fermait en fin de ligne...
Sinon pour éviter toute erreur de syntaxe utilise obmenu
Sur ceux, je suis désolé, mes compétences s'arrêtent ici je pense wink

Hors ligne

#12 Le 20/12/2009, à 19:07

btmtrn

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

C'est pas grave, merci quand même smile

Dernière modification par btmtrn (Le 20/12/2009, à 19:08)

Hors ligne

#13 Le 21/12/2009, à 17:38

Kookaburra

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

J'ai essayé d'installer ce "pipeline" chez moi, et j'ai fini par réussir.

Voici la procédure :

* Installes les paquets suivants :

sudo apt-get install menu menu-xdg openbox-xdgmenu extra-xdg-menus xdg-utils

Certains seront surement déjà installés chez toi. Par exemple, cher moi, il manquait seulement le paquet 'menu-xdg' pour que le pipeline fonctionne  ...

* Ensuite, il faut vérifier que tu as bien ce fichier dans "/usr/bin/obm-xdg" :

#!/usr/bin/python2.5 -O 
#########################################################################
#  Copyright 2005 Manuel Colmenero 
#
#    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, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
########################################################################
#
# a free desktop menus implementation for openbox
#

import xml.dom.minidom, obxml, os, sys, time

class XdgMenu:
	
	def __init__(self):
		self.name = ""
		self.title = ""
		self.directory = ""
		self.directorydir = ""
		self.directorydirs = []
		self.children = []
		self.parent = None
		self.include = None
		self.exclude = None
		self.lang = None
		self.appdirs = []
		self.items = []
		self.onlyunallocated = False
		self.deleted = False
		self.filename = ""
		
	def _get_node_value(self, node):
		if node.hasChildNodes():
			for n in node.childNodes:
				if n.nodeName == "#text" and n.nodeValue.strip() != "":
					return n.nodeValue.strip()
	
	def _get_root_menu(self, menu):
		child = menu
		while child.parent != None:
			child = child.parent
		return child
		
	def _find_menu(self, name):
		if self.name == name:
			return self
		for c in self.children:
			if c.name == name:
				return c
			else:
				b = c._find_menu(name)
				if b: return b
	
	def merge(self, menu):
		for directory in menu.directorydirs:
			if os.path.isdir(directory):
				self.directorydirs += directory
		self.directory = menu.directory
		self.children += menu.children
	
	def parseInclude(self, node, logic):
		for item in node.childNodes:
			if item.nodeType == 1:
				i = XdgLogic(item.nodeName.upper())
				if item.nodeName.upper() in ("CATEGORY", "FILENAME"):
					i.setCategory(self._get_node_value(item))
				else:
					i = XdgLogic(item.nodeName.upper())
					self.parseInclude(item, i)
				logic.append(i)
	
	def parseXml(self, parent):
		root = self._get_root_menu(self)
		
		for item in parent.childNodes:
			nname = item.nodeName.lower()
			
			if nname == "name":
				self.name = self._get_node_value(item)
				
			elif nname == "directory":
				self.directory = self._get_node_value(item)
			
			elif nname == "directorydir":
				value = self._get_node_value(item)
				if not os.path.isabs(value):
					value = "%s/%s" % (os.path.dirname(self.filename), value)
				if os.path.isdir(value):
					self.directorydirs.append(value)
					
			elif nname == "defaultdirectorydirs":
				env = os.getenv("XDG_DATA_DIRS")
				if env:
					for item in env.split(":"):
						if os.path.isdir(item):
							self.directorydirs.append("%s/desktop-directories"%(item))
				else:
					self.directorydirs.append("/usr/share/desktop-directories")
					self.directorydirs.append("/usr/local/share/desktop-directories")
				
			elif nname == "include":
				self.include = XdgLogic("OR")
				self.parseInclude(item, self.include)
			
			elif nname == "exclude":
				self.exclude = XdgLogic("OR")
				self.parseInclude(item, self.exclude)
			
			elif nname == "onlyunallocated":
				self.onlyunallocated = True
			elif nname == "notonlyunallocated":
				self.onlyunallocated = False
			elif nname == "deleted":
				self.deleted = True
			elif nname == "notdeleted":
				self.deleted = False
				
			elif nname == "mergefile":
				fn = self._get_node_value(item)
				if not os.path.isabs(fn):
					fn = "%s/%s" % (os.path.dirname(self.filename), fn)
				newmenu = XdgMenu()
				newmenu.parseFile(fn)
				m = root._find_menu(newmenu.name)
				if m:
					m.merge(newmenu)
				else:
					newmenu.parent = self
					self.children.append(newmenu)
			
			elif nname == "appdir":
				dr = self._get_node_value(item)
				if not os.path.isabs(dr):
					dr = "%s/%s" % (os.path.dirname(self.filename), dr)
				self.appdirs.append(dr)
				
			elif nname == "defaultappdirs":
				xdg_data_dirs = []
				xdg_env = os.getenv("XDG_DATA_DIRS")
				if xdg_env:
					for item in xdg_env.split(":"):
						if item != "" and os.path.isdir(item):
							xdg_data_dirs.append(item)
				else:
					xdg_data_dirs.append("/usr/share")
					xdg_data_dirs.append("/usr/local/share")
				
				for xdir in xdg_data_dirs:
					if os.path.isdir("%s/applications"%(xdir)):
						self.appdirs.append("%s/applications"%(xdir))
			
			elif nname == "menu":
				newmenu = XdgMenu()
				newmenu.appdirs += self.appdirs
				newmenu.directorydirs += self.directorydirs
				newmenu.filename = self.filename
				newmenu.lang = self.lang
				newmenu.parseXml(item)
				m = root._find_menu(newmenu.name)
				if m:
					m.merge(newmenu)
				else:
					newmenu.parent = self
					self.children.append(newmenu)
							
	def parseFile(self, filename):
		f = open(filename)
		dom = xml.dom.minidom.parseString(f.read())
		f.close()
		self.filename = filename
		self.parseXml(dom.documentElement)
	
	def parseDirectoryFile(self, filename, language):
		title = ""
		accuracy = 0
		
		if language:
			l = language.split(".")[0].split("_")
			if len(l) == 2:
				lang_major = l[0]
				lang_minor = l[1]
			else:
				lang_major = l[0]
				lang_minor = None
		else:
			lang_major = "en"
			lang_minor = None

		for line in open(filename):
			i = line.split("=")[0].lower()
			n = line.find("=")
			if i[0:4] == "name":
				name = line[n+1:]
				if "[" in line[:n]:
					lang = line[:n].split("[")[1].split("]")[0]
				else:
					lang = None

				if lang:
					if lang_major in lang and (title == "" or accuracy < 2):
						title = name
						accuracy = 2
					if lang_minor and lang_major in lang and lang_minor in lang:
						title = name
						accuracy = 3
				elif title == "":
						accuracy = 1
						title = name
		return unicode(title.strip() ,"utf-8")
	
	def parseDesktopFile(self, filename, language):
		title = ""
		exe = ""
		cats = []
		accuracy = 0
		
		if language:
			l = language.split(".")[0].split("_")
			if len(l) == 2:
				lang_major = l[0]
				lang_minor = l[1]
			else:
				lang_major = l[0]
				lang_minor = None
		else:
			lang_major = "en"
			lang_minor = None

		for line in open(filename):
			i = line.split("=")[0].lower()
			n = line.find("=")
			if i[0:4] == "name":
				name = line[n+1:]
				if "[" in line[:n]:
					lang = line[:n].split("[")[1].split("]")[0]
				else:
					lang = None

				if lang:
					if lang_major in lang and (title == "" or accuracy < 2):
						title = name
						accuracy = 2
					if lang_minor and lang_major in lang and lang_minor in lang:
						title = name
						accuracy = 3
				elif title == "":
						accuracy = 1
						title = name

			elif i == "exec":
				exe = ""
				jump = False
				for c in line[n+1:]:
					if not jump:
						if c == "%":
							jump = True
						else:
							exe += c
					else:
						jump = False
			elif i == "categories":
				cats = line[n+1:].strip().split(";")
				if cats[-1] == "":
					cats.pop(-1)
		item = {
			"name": unicode(title.strip() ,"utf-8"),
			"exec": exe.strip(),
			"categories": cats,
			"filename": filename,
			"allocated": False
			}
		return item
	
	def getAllAppdirs(self, l=[]):
		for item in self.children:
			for dr in item.appdirs:
				if not dr in l:
					l.append(dr)
			item.getAllAppdirs(l)
		return l
	
	def loadItems(self):
		data = {}
		appdirs = self.getAllAppdirs([])
		
		for each in appdirs:
			data[each] = []
			for f in os.listdir(each):
				if ".desktop" in f:
					i = self.parseDesktopFile("%s/%s" % (each, f), self.lang)
					data[each].append(i)
		
		self._allocate_items(data)
		self._create_items(data)
		self._get_menus_titles(self.lang)
		
	def _get_menus_titles(self, languaje):
		for item in self.directorydirs:
			fn = "%s/%s" % (item, self.directory)
			if os.path.isfile(fn):
				self.title = self.parseDirectoryFile(fn, languaje)
		if self.title == "":
			self.title = self.name
		for each in self.children:
			each._get_menus_titles(languaje)
	
	def _allocate_items(self, data):
		if self.include:
			for d in self.appdirs:
				for item in data[d]:
					if self.include.evaluate(item["categories"], item["filename"]):
						item["allocated"] = True
		for item in self.children:
			item._allocate_items(data)	
	
	def _create_items(self, data):
		if self.include:
			for d in self.appdirs:
				for item in data[d]:
					if not self.onlyunallocated or self.onlyunallocated and not item["allocated"]:
						if self.include.evaluate(item["categories"], item["filename"]):
							if self.exclude:
								if not self.exclude.evaluate(item["categories"], item["filename"]):
									self.items.append(item)
							else:
								self.items.append(item)
		for item in self.children:
			item._create_items(data)
			
	def _create_obmenu(self, obmenu, root=None):
		if self.parent:
			pid = "xdg-" + self.name
		else:
			pid = root
		
		for child in self.children:
			if len(child.items) > 0 or len(child.children) > 0:
				obmenu.createMenu(pid, child.title, "xdg-" + child.name)
				child._create_obmenu(obmenu, root)
		for item in self.items:
			obmenu.createItem(pid, item["name"], "Execute", item["exec"])
	
class XdgLogic:
	def __init__(self, tipe):
		self.tipe = tipe
		self.items = []
		self.value = False
		self.cat = ""
		
	def append(self, item):
		self.items.append(item)

	def evaluate(self, list, filename):
		
		if self.tipe == "CATEGORY":
			self.value = self.cat in list
			return self.value
		
		if self.tipe == "FILENAME":
			self.value = self.cat == filename
			return self.value
			
		if self.tipe == "NOT":
			self.value = False
			for i in self.items:
				self.value = self.value or not i.evaluate(list, filename)
			return self.value
				
		if self.tipe == "AND":
			self.value = True
			for i in self.items:
				if not i.evaluate(list, filename):
					self.value = False
					return self.value
			return self.value
			
		if self.tipe == "OR":
			self.value = False
			for i in self.items:
				self.value = self.value or i.evaluate(list, filename)
			return self.value
			
		if self.tipe == "ALL":
			self.value = True
			return self.value
			
	def setCategory(self, cat):
		self.cat = cat
		
if __name__ == "__main__":
	
	mnu = XdgMenu()
	
	if os.getenv("LANG") != "":
		mnu.lang = os.getenv("LANG")
	home = os.getenv("HOME")
	
	xdg_cd = os.getenv("XDG_CONFIG_DIRS")
	xdg_ch = os.getenv("XDG_CONFIG_HOME")
	
	if not xdg_ch:
		xdg_ch = "%s/.config" % (home)
	if not xdg_cd:
		xdg_cd = "/etc/xdg"
	
	filename =  ""
	role = None
	
	if os.path.isfile("%s/menus/applications.menu"%(xdg_ch)):
		filename = "%s/menus/applications.menu"%(xdg_ch)
	else:
		for cdir in xdg_cd.split(":"):
			if os.path.isfile("%s/menus/applications.menu"%(cdir)):
				filename = "%s/menus/applications.menu"%(cdir)
				break
	
	for arg in sys.argv[1:]:
		if arg == "--import":
			role = "import"
		elif arg == "-i":
			role = "import"
		elif arg == "--replace":
			role = "replace"
		elif arg == "-r":
			role = "replace"
		else:
			if os.path.isfile(sys.argv[1]):
				filename = sys.argv[1]
	
	mnu.parseFile(filename)
	
	if role in ("replace", "import"):
	
		mnu.loadItems()
		obmenu = obxml.ObMenu()
		obmenu.newMenu()
		
		if role == "replace":
			mnuid = "root-menu"
			mnulb = "Openbox 3"
		else:
			mnuid = "obm-xdg-menus"
			mnulb = "Gnome menus"
		
		
		obmenu.createMenu(None, mnulb, mnuid)
		mnu._create_obmenu(obmenu, mnuid)
		
		if role == "replace":
			obmenu.createMenu(mnuid, "Openbox", "Openbox-Conf-Menu")
			obmenu.createItem("Openbox-Conf-Menu", "Edit preferences", "Execute", "obconf")
			obmenu.createItem("Openbox-Conf-Menu", "Edit menus", "Execute", "obmenu")
			obmenu.createItem("Openbox-Conf-Menu", "Reload prefences", "Reconfigure", "")
			obmenu.createSep("Openbox-Conf-Menu")
			obmenu.createItem("Openbox-Conf-Menu", "Exit", "Exit", "")
			obmenu.createSep(mnuid)
			obmenu.createLink(mnuid, "client-list-menu")
		
			if not os.path.isdir(xdg_ch):
				os.mkdir(xdg_ch)
			if not os.path.isdir("%s/openbox"%(xdg_ch)):
				os.mkdir("%s/openbox"%(xdg_ch))
			if os.path.isfile("%s/openbox/menu.xml"%(xdg_ch)):
				os.rename("%s/openbox/menu.xml"%(xdg_ch), "%s/openbox/menu.xml~"%(xdg_ch))
			obmenu.saveMenu("%s/openbox/menu.xml"%(xdg_ch))
		
		else:
			obmenu.saveMenu("gnome-menus.xml")
		
	else:
	
		cachefile = "%s/.obmxdg.xml" % (home)
		if os.path.isfile(cachefile):
			new = False
			for appdir in mnu.getAllAppdirs():
				if os.path.getmtime(appdir) > os.path.getmtime(cachefile):
					new = True
					break
			if not new:
				cache = open(cachefile)
				print cache.read()
				cache.close()
				sys.exit()
				
		mnu.loadItems()
		obmenu = obxml.ObMenu()
	
		obmenu.newPipe()
		mnu._create_obmenu(obmenu)
		obmenu.saveMenu(cachefile)
		obmenu.printXml()

Pour être sûr d'avoir le bon fichier au bon endroit, tu peux ré-installer le paquet 'obmenu', ce qui va remettre en place ce fichier :

sudo apt-get remove obmenu && sudo apt-get install obmenu

* Tu rajoutes cette ligne dans ton 'menu.xml', tu l'enregistres et enfin tu fais "reconfigure" et "restart" :

<menu id="xdg-menu" label="Applications" execute="obm-xdg"/>

Maintenant, cela doit fonctionner ... smile

wink

Dernière modification par Kookaburra (Le 21/12/2009, à 17:40)


Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...

Hors ligne

#14 Le 21/12/2009, à 17:44

Kookaburra

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Par contre, il est loin d'être parfait aussi, il ne retrouve pas toutes les applications hmm

Logique, quand on lit ça :

http://wiki.archlinux.fr/openbox:reglage

il peut générer un menu à base de sous menus-catégories d'applications GTK/GNOME installées sur votre ordinateur

Bye bye les applications non "gtk-gnome" tongue


Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...

Hors ligne

#15 Le 21/12/2009, à 18:06

btmtrn

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Toujours rien ! mad

Hors ligne

#16 Le 21/12/2009, à 18:11

Kookaburra

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Je ne peux rien de plus pour toi, chez moi ça marche ...

1261415424.png

Tu as bien tout fait ce que je t'avais montré ? (au cas où hmm)


Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...

Hors ligne

#17 Le 21/12/2009, à 18:27

btmtrn

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

J'ai réinstallé obmenu au lieu de comparer les deux fichiers obm-xdg et ça marche (traduction française possible ?) ! Merci pour ton aide !

Dans ta capture d'écran tu semble avoir un menu « Système » (comme GNOME), comment as-tu fait ?

Ensuite, reste le problème du titre du menu.

Hors ligne

#18 Le 21/12/2009, à 19:39

Kookaburra

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

btmtrn a écrit :

J'ai réinstallé obmenu au lieu de comparer les deux fichiers obm-xdg et ça marche (traduction française possible ?) ! Merci pour ton aide !

Cool ! smile

Pour la traduction en fr, je pense qu'il faut faire des modifs dans le obm-xdg, mais là comme ça, je peux pas te dire ...

Dans ta capture d'écran tu semble avoir un menu « Système » (comme GNOME), comment as-tu fait ?

C'est une partie du menu "par défaut" de Crunchbang Linux, après les programmes qui vont avec ...
Je te poste mon 'menu.xml", si ça peux t'aider wink

<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/                 file:///usr/share/openbox/menu.xsd">
	<menu id="root-menu" label="Openbox 3">
		<separator label="CrunchBang Linux"/>
		<item label="Thunar">
			<action name="Execute">
				<execute>
					thunar
				</execute>
			</action>
		</item>
		<item label="Geany">
			<action name="Execute">
				<execute>
					geany
				</execute>
			</action>
		</item>
		<item label="Deluge">
			<action name="Execute">
				<execute>
					deluge
				</execute>
			</action>
		</item>
		<item label="aMule">
			<action name="Execute">
				<execute>
					amule
				</execute>
			</action>
		</item>
		<item label="Media-center">
			<action name="Execute">
				<execute>
					/home/dimitri/ubuntu/deb/mediacenter/launch-mc.sh
				</execute>
			</action>
		</item>
		<item label="Synaptic">
			<action name="Execute">
				<execute>
					gksudo synaptic
				</execute>
			</action>
		</item>
		scrot -d 10 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ &amp; gpicview ~/images/$f'
		<separator/>
		<menu execute="python ~/.config/openbox/scripts/gweather.py orleans fr" id="pipe-weather" label="Météo"/>
		<menu id="photographie" label="Photographie">
			<item label="Gimp">
				<action name="Execute">
					<execute>
							gimp
					</execute>
				</action>
			</item>
			<item label="Gthumb">
				<action name="Execute">
					<execute>
							gthumb
					</execute>
				</action>
			</item>
			<item label="Phatch">
				<action name="Execute">
					<execute>
							phatch
					</execute>
				</action>
			</item>
			<item label="jBrout">
				<action name="Execute">
					<execute>
							jbrout
					</execute>
				</action>
			</item>
			<item label="RawTherapee">
				<action name="Execute">
					<execute>
							rawtherapee
					</execute>
				</action>
			</item>
			<item label="Hugin">
				<action name="Execute">
					<execute>
							hugin
					</execute>
				</action>
			</item>
			<item label="Enblend">
				<action name="Execute">
					<execute>
							enblend
					</execute>
				</action>
			</item>
			<menu id="Screenshots" label="Screenshots">
				<item label="Now ...">
					<action name="Execute">
						<execute>
							scrot '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ScreenShoots &amp; gpicview ~/images/ScreenShoots/$f'
						</execute>
					</action>
				</item>
				<item label="In 5 s ...">
					<action name="Execute">
						<execute>
							scrot -d 5 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ScreenShoots &amp; gpicview ~/images/ScreenShoots/$f'
						</execute>
					</action>
				</item>
				<item label="In 10 s ...">
					<action name="Execute">
						<execute>
							scrot -d 10 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ScreenShoots &amp; gpicview ~/images/ScreenShoots/$f'
						</execute>
					</action>
				</item>
			</menu>
		</menu>
		<menu id="xdg-menu" label="Applications" execute="obm-xdg"/>
		<menu id="Debian"/>
		<menu id="preferences" label="Préférences">
			<item label="Edit conkyrc">
				<action name="Execute">
					<execute>
							geany ~/.conkyrc1
					</execute>
				</action>
			</item>
			<item label="dmenu config file">
				<action name="Execute">
					<execute>
							geany ~/.config/dmenu/dmenu-bind.sh
					</execute>
				</action>
			</item>
			<item label="gmrunrc">
				<action name="Execute">
					<execute>
							geany ~/.gmrunrc
					</execute>
				</action>
			</item>
			<item label="Terminator config file">
				<action name="Execute">
					<execute>
							geany ~/.config/terminator/config
					</execute>
				</action>
			</item>
			<item label="Tint2 config file">
				<action name="Execute">
					<execute>
							geany ~/.config/tint2/tint2rc
					</execute>
				</action>
			</item>
			<item label="User Interface Settings">
				<action name="Execute">
					<execute>
						lxappearance
					</execute>
				</action>
			</item>
			<item label="Screensaver - Power">
				<action name="Execute">
					<execute>
						gnome-screensaver-preferences
					</execute>
				</action>
			</item>
			<item label="Choose wallpapers">
				<action name="Execute">
					<execute>
						nitrogen ~/images/wallpapers/
					</execute>
				</action>
			</item>
		</menu>
		<menu id="openbox" label="Openbox">
			<item label="Edit menu.xml">
				<action name="Execute">
					<execute>
							geany ~/.config/openbox/menu.xml
					</execute>
				</action>
			</item>
			<item label="rc.xml">
				<action name="Execute">
					<execute>
							geany ~/.config/openbox/rc.xml
					</execute>
				</action>
			</item>
			<item label="autostart.sh">
				<action name="Execute">
					<execute>
							geany ~/.config/openbox/autostart.sh
					</execute>
				</action>
			</item>
			<item label="Obmenu">
				<action name="Execute">
					<execute>
							obmenu
					</execute>
				</action>
			</item>
			<item label="Obconf">
				<action name="Execute">
					<execute>
							obconf
					</execute>
				</action>
			</item>
			<item label="Obkey">
				<action name="Execute">
					<execute>
						python /home/dimitri/ubuntu/deb/obkey/obkey
					</execute>
				</action>
			</item>
			<item label="Reconfigure">
				<action name="Reconfigure"/>
			</item>
			<item label="Restart">
				<action name="Restart"/>
			</item>
		</menu>
		<menu id="systéme" label="Systéme">
			<item label="System Update">
				<action name="Execute">
					<execute>
						system-update
					</execute>
				</action>
			</item>
			<item label="Disk Partitioner">
				<action name="Execute">
					<execute>
						gksudo gparted
					</execute>
				</action>
			</item>
			<item label="Adjust with lxrandr">
				<action name="Execute">
					<execute>
						    lxrandr
					</execute>
				</action>
			</item>
			<item label="Adjust with grandr">
				<action name="Execute">
					<execute>
						    grandr
					</execute>
				</action>
			</item>
			<item label="Edit Default Applications">
				<action name="Execute">
					<execute>
						terminator --command=&quot;sudo update-alternatives --all&quot;
					</execute>
				</action>
			</item>
			<item label="Login setup (GDM)">
				<action name="Execute">
					<execute>
						gksudo gdmsetup
					</execute>
				</action>
			</item>
			<item label="Network Admin">
				<action name="Execute">
					<execute>
						network-admin
					</execute>
				</action>
			</item>
			<item label="Package Manager">
				<action name="Execute">
					<execute>
						gksudo synaptic
					</execute>
				</action>
			</item>
			<item label="Passwords and Encryption Keys">
				<action name="Execute">
					<execute>
						seahorse
					</execute>
				</action>
			</item>
			<item label="Printer Settings">
				<action name="Execute">
					<execute>
						system-config-printer
					</execute>
				</action>
			</item>
			<item label="Restricted Device Manager">
				<action name="Execute">
					<execute>
						gksudo jockey-gtk
					</execute>
				</action>
			</item>
			<item label="Services/Daemons">
				<action name="Execute">
					<execute>
						services-admin
					</execute>
				</action>
			</item>
			<item label="Shared Folders">
				<action name="Execute">
					<execute>
						shares-admin
					</execute>
				</action>
			</item>
			<item label="System Monitor">
				<action name="Execute">
					<execute>
						terminator --command=htop
					</execute>
				</action>
			</item>
			<item label="System Logs">
				<action name="Execute">
					<execute>
						gnome-system-log
					</execute>
				</action>
			</item>
			<item label="Time/Date">
				<action name="Execute">
					<execute>
						time-admin
					</execute>
				</action>
			</item>
			<item label="Users/Groups">
				<action name="Execute">
					<execute>
						users-admin
					</execute>
				</action>
			</item>
		</menu>
		<separator/>
		<item label="OBlogout">
			<action name="Execute">
				<execute>
					oblogout
				</execute>
			</action>
		</item>
	</menu>
</openbox_menu>

Ensuite, reste le problème du titre du menu.

Tu veux juste changer le nom du menu "applications", c'est ça ? C'est simple, tu modifie "applications" dans ce que tu as mis dans le 'menu.xml" :

<menu id="xdg-menu" label="Applications" execute="obm-xdg"/>
<menu id="xdg-menu" label="Ce que tu veux" execute="obm-xdg"/>

wink

Dernière modification par Kookaburra (Le 21/12/2009, à 19:40)


Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...

Hors ligne

#19 Le 21/12/2009, à 20:42

btmtrn

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

La localisation du menu doit se faire via des fichiers appelés, je vais faire des recherches.

Le titre du menu, c'est ce qui te met « CrunchBang Linux » tout en haut sur fond gris. Je ferais bien une capture d'écran, mais le menu s'enlève à chaque fois (pour le coup, c'est mieux avec Windows pour les éléments « pop-up »).

Hors ligne

#20 Le 21/12/2009, à 21:17

Kookaburra

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

btmtrn a écrit :

Le titre du menu, c'est ce qui te met « CrunchBang Linux » tout en haut sur fond gris. Je ferais bien une capture d'écran, mais le menu s'enlève à chaque fois (pour le coup, c'est mieux avec Windows pour les éléments « pop-up »).

Ha ok, dans ce cas là il s'agit d'un séparateur avec un titre, comme ça :

<separator label="CrunchBang Linux"/>
<separator label="Ce que tu veux"/>

Tu peux en mettre où tu veux dans ton menu.xml, avec le "titre" que tu veux !  smile


Tiens, différentes captures de mon bureau sous Openbox, pour te donner une idée de ce que l'on peut y faire wink


1261260453.jpg

1261260714.jpg

1261260206.jpg

Dernière modification par Kookaburra (Le 21/12/2009, à 21:18)


Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...

Hors ligne

#21 Le 21/12/2009, à 21:25

btmtrn

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Très bien. Merci beaucoup pour ton aide. Je met en résolu !

Hors ligne

#22 Le 21/12/2009, à 21:58

Kookaburra

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Content d'avoir pu t'aider smile


Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...

Hors ligne

#23 Le 11/01/2010, à 21:46

DomS

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Kookaburra a écrit :

Il faut coller ça dans ton '~/.config/openbox/menu.xml' pour avoir un menu avec toutes tes applications :

<menu id="Debian"/>

Et tu rajoutes ça à ton '~/.config/openbox/rc.xml' :

<file>/var/lib/openbox/debian-menu.xml</file>
<file>debian-menu.xml</file>

( Entre les entrées <menu> et </menu>, avant l'entrée <file>menu.xml</file> )

Je ne comprends pas, chez moi ça ne marche pas. Pourtant tout était bien installé et bien réglé. Voici mon fichier menu.xml

<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/                 file:///usr/share/openbox/menu.xsd">
	<menu id="Debian" label="Debian">
	</menu>
	<menu id="root-menu" label="Openbox 3">
		<item label="Web">
			<action name="Execute">
				<execute>
                    firefox
				</execute>
			</action>
		</item>
		<item label="Fichier">
			<action name="Execute">
				<execute>
					thunar
				</execute>
			</action>
		</item>
		<item label="Pidgin">
			<action name="Execute">
				<execute>
                    pidgin
				</execute>
			</action>
		</item>
		<item label="Terminal">
			<action name="Execute">
				<execute>
                    xterm
				</execute>
			</action>
		</item>
		<!-- This requires the presence of the 'menu' package to work -->
		<separator/>
		<menu id="root-menu-425526" label="Audio et Vidéo">
			<item label="Gravure CD/DVD">
				<action name="Execute">
					<execute>
                        brasero
					</execute>
				</action>
			</item>
			<item label="GNOME Mplayer">
				<action name="Execute">
					<execute>
                        gnome-mplayer
					</execute>
				</action>
			</item>
			<item label="VLC">
				<action name="Execute">
					<execute>
                        vlc
					</execute>
				</action>
			</item>
			<item label="Audacious">
				<action name="Execute">
					<execute>
                        audacious
					</execute>
				</action>
			</item>
			<item label="Sonata">
				<action name="Execute">
					<execute>
                        sonata
					</execute>
				</action>
			</item>
			<item label="Quod Libet">
				<action name="Execute">
					<execute>
                        quodlibet
					</execute>
				</action>
			</item>
			<item label="Alsamixer">
				<action name="Execute">
					<execute>
                        xterm -e alsamixer
					</execute>
				</action>
			</item>
		</menu>
		<menu id="root-menu-643912" label="Graphisme">
			<item label="The GIMP">
				<action name="Execute">
					<execute>
                        gimp
					</execute>
				</action>
			</item>
			<item label="Visionneur d'images">
				<action name="Execute">
					<execute>
                        gpicview
					</execute>
				</action>
			</item>
		</menu>
		<menu id="root-menu-894741" label="Internet">
			<item label="Firefox">
				<action name="Execute">
					<execute>
                        firefox
					</execute>
				</action>
			</item>
			<item label="Pidgin">
				<action name="Execute">
					<execute>
                        pidgin
					</execute>
				</action>
			</item>
			<item label="Emesene">
				<action name="Execute">
					<execute>
                        emesene
					</execute>
				</action>
			</item>
			<item label="Transmission">
				<action name="Execute">
					<execute>
                        transmission
					</execute>
				</action>
			</item>
			<item label="Wicd">
				<action name="Execute">
					<execute>
                        wicd
					</execute>
				</action>
			</item>
		</menu>
		<menu id="root-menu-303456" label="Bureautique">
			<item label="Abiword">
				<action name="Execute">
					<execute>
                        abiword
					</execute>
				</action>
			</item>
			<item label="Gnumeric">
				<action name="Execute">
					<execute>
                        gnumeric
					</execute>
				</action>
			</item>
			<item label="OOo Traitement de texte">
				<action name="Execute">
					<execute>
                        ooffice -writer
					</execute>
				</action>
			</item>
			<item label="OOo Tableur">
				<action name="Execute">
					<execute>
                        ooffice -calc
					</execute>
				</action>
			</item>
			<item label="OOo Présentation">
				<action name="Execute">
					<execute>
                        ooffice -impress
					</execute>
				</action>
			</item>
		</menu>
		<menu id="root-menu-51280" label="Utilitaires">
			<item label="Leafpad">
				<action name="Execute">
					<execute>
                        leafpad
					</execute>
				</action>
			</item>
			<item label="Geany">
				<action name="Execute">
					<execute>
                        geany
					</execute>
				</action>
			</item>
			<item label="Calculatrice">
				<action name="Execute">
					<execute>
                        xcalc
					</execute>
				</action>
			</item>
			<item label="Utilisation disques">
				<action name="Execute">
					<execute>
                        baobab
					</execute>
				</action>
			</item>
			<item label="Galternatives">
				<action name="Execute">
					<execute>
                        galternatives
					</execute>
				</action>
			</item>
			<item label="Xarchiver">
				<action name="Execute">
					<execute>
                        xarchiver
					</execute>
				</action>
			</item>
		</menu>
		<menu id="root-menu-875347" label="Système">
			<item label="Htop">
				<action name="Execute">
					<execute>
                        xterm -e htop
					</execute>
				</action>
			</item>
			<item label="Moniteur">
				<action name="Execute">
					<execute>
                        xfce4-taskmanager
					</execute>
				</action>
			</item>
		</menu>
		<separator/>
		<menu id="root-menu-59416" label="Config">
			<menu id="root-menu-59416-92457" label="Admin">
				<item label="Gestionnaire de paquets Synaptic">
					<action name="Execute">
						<execute>
                            gksu synaptic
						</execute>
					</action>
				</item>
				<item label="Gparted">
					<action name="Execute">
						<execute>
                            gksu gparted
						</execute>
					</action>
				</item>
				<item label="GDM setup">
					<action name="Execute">
						<execute>
                            gksu gdmsetup
						</execute>
					</action>
				</item>
			</menu>
			<menu id="root-menu-59416-15441" label="Préférences">
				<item label="Thème GTK">
					<action name="Execute">
						<execute>
                            gtk-chtheme
						</execute>
					</action>
				</item>
				<item label="Fond d'écran">
					<action name="Execute">
						<execute>
                            nitrogen /usr/share/bee/wallpapers
						</execute>
					</action>
				</item>
			</menu>
			<menu id="root-menu-59416-21537" label="Openbox">
				<item label="Obconf">
					<action name="Execute">
						<execute>
                            obconf
						</execute>
					</action>
				</item>
				<item label="Obmenu">
					<action name="Execute">
						<execute>
                            obmenu
						</execute>
					</action>
				</item>
				<item label="Editer autostart">
					<action name="Execute">
						<execute>
                            leafpad ~/.config/openbox/autostart
						</execute>
					</action>
				</item>
				<item label="Editer menu.xml">
					<action name="Execute">
						<execute>
                            leafpad ~/.config/openbox/menu.xml
						</execute>
					</action>
				</item>
				<item label="Editer rc.xml">
					<action name="Execute">
						<execute>
                            leafpad ~/.config/openbox/rc.xml
						</execute>
					</action>
				</item>
				<separator/>
				<item label="Reconfigure">
					<action name="Reconfigure"/>
				</item>
				<item label="Restart">
					<action name="Restart"/>
				</item>
			</menu>
		</menu>
		<separator/>
		<item label="Fermer la session">
			<action name="Exit"/>
		</item>
		<item label="Redémarrer">
			<action name="Execute">
				<execute>
                    sudo shutdown -r now
				</execute>
			</action>
		</item>
		<item label="Arrêter">
			<action name="Execute">
				<execute>
                    sudo shutdown -h now
				</execute>
			</action>
		</item>
	</menu>
</openbox_menu>

Le menu debian est le seul qui ne s'affiche pas hmm

Dernière modification par D0mS (Le 11/01/2010, à 21:48)


PC fixe :  lubuntu 24.04

Hors ligne

#24 Le 11/01/2010, à 22:05

Kookaburra

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Je pense que dans ton 'menu.xml' ton menu Debian n'est pas placé là où il faut. En fait il ne faut rien avant "<menu id="root-menu" label="Openbox 3">" ... Et tu ne mettais pas la bonne syntaxe pour le menu "Debian" en plus wink

Essayes de le placer comme ça, enregistres-le, fait "reconfigure" et dis-nous ce que ça donne ! smile

<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/                 file:///usr/share/openbox/menu.xsd">
	<menu id="root-menu" label="Openbox 3">
	<separator label="Debian "/>
        <item label="Web">
            <action name="Execute">
                <execute>
                    firefox
                </execute>
            </action>
        </item>
        <item label="Fichier">
            <action name="Execute">
                <execute>
                    thunar
                </execute>
            </action>
        </item>
        <item label="Pidgin">
            <action name="Execute">
                <execute>
                    pidgin
                </execute>
            </action>
        </item>
        <item label="Terminal">
            <action name="Execute">
                <execute>
                    xterm
                </execute>
            </action>
        </item>
      <separator/>
           <!-- This requires the presence of the 'menu' package to work -->
           <menu id="Debian"/>
           <separator/>

Dernière modification par Kookaburra (Le 11/01/2010, à 22:12)


Portable17p : CrunchBangLinux // EeePC : ArchLinux
Openbox Addict : http://kookadimi.deviantart.com
Mes photos : http://www.fluidr.com/photos/kookadimi/sets
Votre téléphone mobile dispose de plus de puissance que l'ensemble des ordinateurs de la NASA en 1969. La NASA a lancé un homme sur la Lune. Vous lancez un oiseau sur des cochons...

Hors ligne

#25 Le 12/01/2010, à 19:42

DomS

Re : {{Résolu}} [Openbox] Menu xdg qui ne fonctionne pas

Merci ça marche ! Merci de ton aide. Je ne comprends pas ce que la ligne :

<separator label="Debian "/>

vient faire au début.


PC fixe :  lubuntu 24.04

Hors ligne