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 05/07/2009, à 19:21

thuban

Postez ici vos Pipemenus Openbox!

Voici un petit truc très pratique dans openbox.
Il s'agit en fait d'un menu, listant tout ce qu'il y a dans le répertoire / . On peut s'y déplacer, et ainsi aller par exemple dans le /home/login/Videos

là, il liste (toujours dans le menu d'openbox) les fichiers présents, et lorsque l'on clique sur une video, il la lance avec mplayer.
Cela fonctionne aussi pour les images, musique, et autres fichiers, du moments que on les renseigne dans le programme utilisé (ce n'est pas très dur à comprendre).

Voici la procédure à suivre :
récupérer ce programme :
http://student.tol.oulu.fi/~lhakko/dir-menu
enregistrez-le par exemple sous le nom obfile.py
Vous pouvez éditer les extensions à ce moment-là, j'ai par exemple remplacé mirage par gpicview, et rajouté l'extension mp4 pour les videos...

Copiez-le dans /usr/bin , puis rendez-le éxécutable :

sudo cp obfile.py /usr/bin
sudo chmod +x /usr/bin/obfile.py

rajoutez ensuite ceci dans votre menu.xml : (la première et la 3 eme ligne, la 2eme est là pour vous aider à vous repérer)

<openbox_menu>
<menu id="Fichiers" label="FICHIERS" execute="python /usr/bin/obfile.py" />
	<menu id="root-menu" label="OpenBox 3">
	  <menu id="Fichiers"/>

et voila!

un screenshot :
200907081341071280x800s.th.png

Pour ne pas avoir en liste la racine systeme, mais votre home, voici une version modifiée du programme :

#!/usr/bin/python

import os
import random
from sys import argv

mypath = argv[0]

def ext_resolver(filename):
    ext = filename.split('.')[-1]
    ext = ext.lower()
    ext_list = {'smc':'zsnes -m -v 18 -y',
                'bin':'dgen -f -j',
                'ogm':'mplayer',
                'avi':'mplayer',
                'mkv':'mplayer',
				'ogg':'gnome-mplayer',
				'mp4':'mplayer -s',
				'mp3':'gnome-mplayer',
                'py' :'geany',
				'c' :'geany',
				'pdf' :'evince',
				'obt' :'openofficewriter',
				'py' :'abiword',
                'png':'gpicview',
                'jpg':'gpicview',
                'bmp':'gpicview',
                'gif':'gpicview'}
    if ext in ext_list:
        return ext_list[ext]
    else:
        return 'echo'

def dir_list(dircontent):
    dirs = []
    files = []
    for item in dircontent:
        if os.path.isdir(currentpath + '/' + item):
            dirs.append(item)
        else:
            files.append(item)
    dirs.sort()
    files.sort()
    return dirs, files

def replacer(string):
    return string.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;').replace("'", '&apos;')

def gen_menu(dirs, files):
    curpath = replacer(currentpath)
    print('<openbox_pipe_menu>')
    
    print('<item label="Ouvrir dans Thunar"><action name="execute"><execute>thunar "' + curpath + '"</execute></action></item>')
    print('<item label="Terminal ici..."><action name="execute"><execute>sh -c "cd ' + curpath + ' &amp;&amp; urxvt "</execute></action></item>')
    print('<separator />')
    
    for thisdir in dirs:
        thisdir = replacer(thisdir)
        menuid = str(random.randrange(1,99,1)).zfill(2)
        print('  <menu execute="' + mypath + ' ' + curpath + '/' + thisdir + '" id="' + thisdir + "-" + menuid + '" label="' + thisdir + '"/>')
        
    for thisfile in files:
        thisfile = replacer(thisfile)
        print('  <item label="' + thisfile + '">')
        print('    <action name="execute">')
        print('      <execute>')
        print('        ' + ext_resolver(thisfile) + ' "' + curpath + '/' + thisfile + '"')
        print('      </execute>')
        print('    </action>')
        print('  </item>')
    print('</openbox_pipe_menu>')

if len(argv) > 1:
    currentpath = ' '.join(argv[1:])
else:
    currentpath = "/home/xavier"

try:
    content = [x for x in os.listdir(currentpath) if x[0] != '.']
    parts = dir_list(content)
    gen_menu(parts[0], parts[1])
except OSError:
    print('<openbox_pipe_menu>')
    print('<separator label="No access" />')
    print('</openbox_pipe_menu>')

en remplaçant currentpath par le chemin vers votre home bien sûr

Dernière modification par thuban (Le 09/07/2009, à 12:26)

Hors ligne

#2 Le 06/07/2009, à 10:38

Mopinou

Re : Postez ici vos Pipemenus Openbox!

super ce script big_smile
j'en avait un equivalent, mais il n'ouvrait pas les fichier avec le bon programme smile

par contre, je lui ai apporté une petite modification pour ne pas voir tous les fichiers de sauvegardes du home (*~)
j'ai donc remplacé la ligne 40 de ta version

else:

par

elif (item[-1]!='~'):

ca permet de diminuer la taille du menu

Edit :
j'ai aussi completer les lignes :

dirs.sort()
files.sort()

par

dirs.sort(key=str.lower)
files.sort(key=str.lower)

pour ne pas tenir compte de la casse dans le tri des fichiers / dossiers

Dernière modification par Mopinou (Le 06/07/2009, à 11:09)

Hors ligne

#3 Le 06/07/2009, à 17:21

Marzikill

Re : Postez ici vos Pipemenus Openbox!

Hum...

Super intéressant, merci !

Hors ligne

#4 Le 06/07/2009, à 17:34

thuban

Re : Postez ici vos Pipemenus Openbox!

Merci pour les modifications, surtout la deuxième qui est pratique!

Hors ligne

#5 Le 06/07/2009, à 17:39

Mopinou

Re : Postez ici vos Pipemenus Openbox!

par contre j'ai un petit problème :
comment faire pour que les underscore n'apparaissent pas sous la lettre suivante ?
je chercherai ce soir (si quelqu'un poste la réponse avant moi tant mieux pour moi ^^)

Hors ligne

#6 Le 06/07/2009, à 20:55

HighLight

Re : Postez ici vos Pipemenus Openbox!

Il y a le même genre de "menu" avec pipe dans Crunchbang. J'avais récupéré les scripts pour les mettre sous openbox dans une autre distrib.
Suffit de lancer Crunchbang dans Virtualbox en livecd pour récupérer les scripts. Pas besoin de l'installer wink

#7 Le 08/07/2009, à 10:35

Marzikill

Re : Postez ici vos Pipemenus Openbox!

Hum, j'aurais une question.

Est-il possible de réduire la taille des noms des fichiers affichés par cette méthode ? (parce que j'ai certain noms de fichiers trèèèès long ! wink ).

Par exemple n'afficher que les 5 ou 10 premiers caractère ?

Ça doit être possible, non ? (j'y connais pas grand chose en python big_smile)

Amicalement
Marzikill.

Hors ligne

#8 Le 08/07/2009, à 11:03

Mopinou

Re : Postez ici vos Pipemenus Openbox!

c'est relativement simple niveau code, si tu rajoute :

item = item[:n]

(«n» représentant le nombre de premier caractères voulus) dans la partie suivante :

def dir_list(dircontent):
    dirs = []
    files = []
    for item in dircontent:
if os.path.isdir(currentpath + '/' + item):
            item = item[:7]
            dirs.append(item)
elif (item[-1]!='~'):
            item = item[:5]
            files.append(item)

alors les dossiers auront leurs 7 premier caractères d'afficher et les fichiers leurs 5 premiers. je pense que tu pourra bibouiller selon tes besoins

Hors ligne

#9 Le 08/07/2009, à 11:26

Valentin2105

Re : Postez ici vos Pipemenus Openbox!

il la lance avec mplayer.

Ne fais pas de généralité,
Sinon ton explication est simple et complète,
Par contre le screen, il craint un peu, on voit rien !!


Bon tuto !

Hors ligne

#10 Le 08/07/2009, à 11:26

Marzikill

Re : Postez ici vos Pipemenus Openbox!

Ouai, trop cool, merci, c'est exactement ce que je voulais !

S'tro fort le python.. big_smile

Hors ligne

#11 Le 08/07/2009, à 12:40

thuban

Re : Postez ici vos Pipemenus Openbox!

Valentin2105 a écrit :

il la lance avec mplayer.

Ne fais pas de généralité,
Sinon ton explication est simple et complète,
Par contre le screen, il craint un peu, on voit rien !!


Bon tuto !

Quelle généralité? j'explique juste vite fait le programme, c'est tout.
bon, je mets à jour le screen alors !

Je propose que les autres personnes ayant de bons pipemenus à proposer les postes ici!

Hors ligne

#12 Le 08/07/2009, à 14:12

Marzikill

Re : Postez ici vos Pipemenus Openbox!

Connaissez vous celui pour afficher vos application dynamiquement ?

#!/usr/bin/env lua
--      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 version 3 (GPLv3)
--     
--      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., 51 Franklin Street, Fifth Floor, Boston,
--      MA 02110-1301, USA.
require ("lfs")

-- Localisation désirée pour le nom, commentaire et nom générique.
local locale="fr"

-- Gestionnaire de fenêtres courant (utilisé pour OnlyShowIn).
local current_wm="openbox"

-- programme utilisé pour lancer les applications consoles.
local terminal="xterm -e"

-- Où sera stocké le menu.
local menu = {}


--- returnCategory
-- permet de donner un nom à une liste de catégories.
-- TODO: retourner aussi une image pour la catégorie.
function returnCategory(desktop)
   if desktop["categories"] == nil then
      return nil;
   end
   
   if string.find(desktop["categories"],"AudioVideo") then
      return "Audio/Video"
   end
   if string.find(desktop["categories"],"Education") then
      return "Éducation"
   end
   if string.find(desktop["categories"],"Development") then
      return "Développement"
   end
   if string.find(desktop["categories"],"Game") then
      return "Jeux"
   end
   if string.find(desktop["categories"],"Graphics") then
      return "Graphiques"
   end
   if string.find(desktop["categories"],"Network") then
      return "Réseau"
   end
   if string.find(desktop["categories"],"Office") then
      return "Bureautique"
   end
   if string.find(desktop["categories"],"Settings") then
      return "Réglages"
   end
   if string.find(desktop["categories"],"System") then
      return "Système"
   end
   if string.find(desktop["categories"],"Utility") then
      return "Utilitaires"
   end

   return "Autres"
end


--- loadDesktop
-- retourne une liste de propriétés pour un fichier .deskop.
-- arg: nom complet du fichier
-- ret: structure (terminal, exec, name, genericname, comment, icon,hidden)
--
-- name, genericname et comment sont localisés si possible.
-- Pour avoir la version originale mettre la variable locale à c (de préférence)
function loadDesktop(filename)
   local desktop_file
   local line
   local pos
   local program={
         terminal=false,
         exec,
         name,
         genericname,
         comment,
         icon,
         hidden=false
      }
   
   if string.sub(filename,-7) ~= "desktop" then
      return nil
   end

   desktop_file=io.open(filename,"r")
   if desktop_file == nil then
      print ("Erreur : impossible de charger fichier", filename)
      return nil
   end
   
   line = desktop_file:read()
   while line ~= nil do
      pos = string.find(line,"=")
      if pos ~= nil then
         local key=string.lower(string.sub(line,1,pos-1))
         local value=string.sub(line,pos+1)
         
         if key == "type" then
            program.type=string.lower(value)
         
         elseif key == "terminal" and string.lower(value) == "true" then
            program.terminal=true
            
         elseif key == "name" and program.name == nil then
            program.name=value
         elseif key =="name["..locale.."]" then
            program.name=value
--[[            
         elseif key == "genericname" and program.genericname == nil then
            program.name=value
         elseif key == "genericname["..locale.."]" then
            program.genericname=value
            
         elseif key == "comment" and program.comment == nil then
            program.comment=value
         elseif key == "comment["..locale.."]" then
            program.comment=value
]]            
         elseif key == "icon" then
            program.icon=value
            
         elseif key == "categories" then
            program.categories=value
            
         elseif key == "exec" then
            pos = string.find(value," %%[fFuUdDnNickvm]")
            if pos ~= nil then
               program.exec = string.sub(value,1,pos-1)
            else
               program.exec=value
            end
            
         elseif key=="onlyshowin" and current_wm then
            if not string.find(value,current_wm) then
               program.hidden=true
            end
         end
      end
      line=desktop_file:read()
   end
   desktop_file:close()
   
   if program.terminal then
      program.exec = terminal .." ".. program.exec
   end
   
   return program
end


--- readDirectory(appdir)
-- lit non récursivement les fichiers .desktop du répertoire appdir.
function readDirectory(appdir)
   local appinfo
   local category
   local file
   local entry
   
   for file in lfs.dir(appdir) do
      if file ~= "." and file ~= ".." then
         appinfo = loadDesktop(appdir.."/"..file)
         if appinfo then
            if appinfo.type == "application" and not appinfo.hidden then
               category = returnCategory(appinfo)
               if category ~= nil then
                  if menu[category] == nil then menu[category] = {} end
                  menu[category][appinfo.name]={exec=appinfo.exec,icon=appinfo.icon}
               else
                  menu[appinfo.name]={exec=appinfo.exec,icon=appinfo.icon}
               end
            end
         end
      end
   end
end


--- generateMenuJWM
-- génère un menu dynamique pour JWM à intégrer dans .jwmrc avec
-- <Include>exec:lua /path/nomfichier.lua</Include>
function generateMenuJWM()
   print ("<JWM>")
   for i,k in pairs(menu) do
      if k.exec == nil then
         print("<Menu label=\""..i.."\">")
         for name,data in pairs(k) do
            print("  <Program icon=\"".. data.icon .."\" label=\"".. name .."\">".. data.exec .."</Program>")
         end
         print("</Menu>")
      else
         print("<Program icon=\"".. k.icon .."\" label=\"".. i .."\">".. k.exec .."</Program>")
         print("</item>")
      end
   end
   print("</JWM>")
end


--- generateMenuOpenBox
-- génère un menu dynamique pour OpenBox à intégrer dans menu.xml avec
-- <menu id="id" label="label" execute="lua /path/nomfichier.lua" />
-- et
-- <menu id="id" /> dans le menu "root-menu"
function generateMenuOpenBox()
   print ([[<openbox_pipe_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">]])
   for i,k in pairs(menu) do
      if k.exec == nil then
         print("<menu id=\"".. i .."\" label=\"".. i .."\">")
         for name,data in pairs(k) do
            print("  <item label=\"".. name .."\">")
            print("    <action name=\"Execute\"><execute>".. data.exec .."</execute></action>")
            print("  </item>")
         end
         print("</menu>")
      else
         print("<item label=\"".. i .."\">")
         print("  <action name=\"Execute\"><execute>".. k.exec .."</execute></action>")
         print("</item>")
      end
   end
   print("</openbox_pipe_menu>")
end

readDirectory("/usr/share/applications")
-- readDirectory("/home/mimas/.local/share/applications")

-- *** Choisir generateMenuJWM() ou generateMenuOpenBox ***
generateMenuOpenBox()

Attention, il faut installer lua.

source.

Enjoy ! big_smile

Hors ligne

#13 Le 08/07/2009, à 15:38

Mopinou

Re : Postez ici vos Pipemenus Openbox!

j'ai installer les 2 paquets lua50 et liblua5.1-filesystem0
je lance le script et là erreur :
la première étant

could not load package `lfs' from path [...]

, résolu en installant le paquet "lua40"
alors je relance le script et hop, deuxième erreur :

lua menu_app.lua
error: `=' expected;
  last token read: `,' at line 86 in file `menu_app.lua'

la par contre je vois pas ... et puis le lua je connait pas du tout comme langage de programmation (je savais meme pas que ca existant :x)
quelqu'un aurait une solution ?


sinon il y a certains menus préfait qu'un peut rajouter simplement. Le plus complet de ses menu étant

<menu id="Applications" label="Applications" />

, à rajouter dans le fichier menu.xml d'openbox. Il liste a peut près toutes les applications, mais à sa sauce ...
il y a aussi

<menu id="jeux" label="Jeux" />

Dernière modification par Mopinou (Le 08/07/2009, à 15:41)

Hors ligne

#14 Le 08/07/2009, à 16:20

Marzikill

Re : Postez ici vos Pipemenus Openbox!

Hum...

J'ai essayé ta méthode Mopinou, mais je me prend un No acces dans le figure pour certains fichiers, et rien pour d'autre...

Ah oui, et y aurait-il moyen d'insérer pour les fichiers ainsi tronqués trois '...' à la fin ?

Amicalement
Marzikill.

Hors ligne

#15 Le 08/07/2009, à 16:34

Mopinou

Re : Postez ici vos Pipemenus Openbox!

Marzikill a écrit :

Hum...

J'ai essayé ta méthode Mopinou, mais je me prend un No acces dans le figure pour certains fichiers, et rien pour d'autre...

Ah oui, et y aurait-il moyen d'insérer pour les fichiers ainsi tronqués trois '...' à la fin ?

Amicalement
Marzikill.

ton erreur est peut etre due a des fichier ayant une taille inférieure a celle que tu defini non?

sinon pour rajouter des point après les fichiers raccourcis, change le code rajouté précédement par

if( len( item ) > 5 ):item = item[:5] + '...';

Hors ligne

#16 Le 08/07/2009, à 17:25

Marzikill

Re : Postez ici vos Pipemenus Openbox!

Hum..

Aucun problème pour les fichiers, mais certains dossiers refusent de m'afficher leur contenu.

def dir_list(dircontent):
    dirs = []
    files = []
    for item in dircontent:
        if os.path.isdir(currentpath + '/' + item):
            if( len( item ) > 20 ):item = item[:20] + '...';
            dirs.append(item)
        elif (item[-1]!='~'):
            if( len( item ) > 20 ):item = item[:20] + '...';
            files.append(item)
    dirs.sort()
    files.sort()
    return dirs, files

Hors ligne

#17 Le 08/07/2009, à 18:07

Mopinou

Re : Postez ici vos Pipemenus Openbox!

je ne sais pas du tout d'où ca peut venir. Est ce que ce sont des dossiers particuliers? des dossier dont le nom comporte un caractère bizarre, le meme nom qu'un autre dossier, un dossier avec droits limités,  ...


quelqu'un arrive a faire fonctionner le script lua ??

Hors ligne

#18 Le 09/07/2009, à 11:18

Marzikill

Re : Postez ici vos Pipemenus Openbox!

Moi !

(mais sous Arch wink )

Hors ligne

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

Mopinou

Re : Postez ici vos Pipemenus Openbox!

et sinon on pourrait avoir un appercu du rendu du script dans le menu? pour savoir si ca vaut la peine que j'y passe des heures ou non.
merci smile

Hors ligne

#20 Le 09/07/2009, à 12:24

Marzikill

Re : Postez ici vos Pipemenus Openbox!

Comme ceci.

Hors ligne

#21 Le 09/07/2009, à 12:33

thuban

Re : Postez ici vos Pipemenus Openbox!

Marzikill a écrit :

Connaissez vous celui pour afficher vos application dynamiquement ?

#!/usr/bin/env lua
--      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 version 3 (GPLv3)
--     
--      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., 51 Franklin Street, Fifth Floor, Boston,
--      MA 02110-1301, USA.
require ("lfs")

-- Localisation désirée pour le nom, commentaire et nom générique.
local locale="fr"

-- Gestionnaire de fenêtres courant (utilisé pour OnlyShowIn).
local current_wm="openbox"

-- programme utilisé pour lancer les applications consoles.
local terminal="xterm -e"

-- Où sera stocké le menu.
local menu = {}


--- returnCategory
-- permet de donner un nom à une liste de catégories.
-- TODO: retourner aussi une image pour la catégorie.
function returnCategory(desktop)
   if desktop["categories"] == nil then
      return nil;
   end
   
   if string.find(desktop["categories"],"AudioVideo") then
      return "Audio/Video"
   end
   if string.find(desktop["categories"],"Education") then
      return "Éducation"
   end
   if string.find(desktop["categories"],"Development") then
      return "Développement"
   end
   if string.find(desktop["categories"],"Game") then
      return "Jeux"
   end
   if string.find(desktop["categories"],"Graphics") then
      return "Graphiques"
   end
   if string.find(desktop["categories"],"Network") then
      return "Réseau"
   end
   if string.find(desktop["categories"],"Office") then
      return "Bureautique"
   end
   if string.find(desktop["categories"],"Settings") then
      return "Réglages"
   end
   if string.find(desktop["categories"],"System") then
      return "Système"
   end
   if string.find(desktop["categories"],"Utility") then
      return "Utilitaires"
   end

   return "Autres"
end


--- loadDesktop
-- retourne une liste de propriétés pour un fichier .deskop.
-- arg: nom complet du fichier
-- ret: structure (terminal, exec, name, genericname, comment, icon,hidden)
--
-- name, genericname et comment sont localisés si possible.
-- Pour avoir la version originale mettre la variable locale à c (de préférence)
function loadDesktop(filename)
   local desktop_file
   local line
   local pos
   local program={
         terminal=false,
         exec,
         name,
         genericname,
         comment,
         icon,
         hidden=false
      }
   
   if string.sub(filename,-7) ~= "desktop" then
      return nil
   end

   desktop_file=io.open(filename,"r")
   if desktop_file == nil then
      print ("Erreur : impossible de charger fichier", filename)
      return nil
   end
   
   line = desktop_file:read()
   while line ~= nil do
      pos = string.find(line,"=")
      if pos ~= nil then
         local key=string.lower(string.sub(line,1,pos-1))
         local value=string.sub(line,pos+1)
         
         if key == "type" then
            program.type=string.lower(value)
         
         elseif key == "terminal" and string.lower(value) == "true" then
            program.terminal=true
            
         elseif key == "name" and program.name == nil then
            program.name=value
         elseif key =="name["..locale.."]" then
            program.name=value
--[[            
         elseif key == "genericname" and program.genericname == nil then
            program.name=value
         elseif key == "genericname["..locale.."]" then
            program.genericname=value
            
         elseif key == "comment" and program.comment == nil then
            program.comment=value
         elseif key == "comment["..locale.."]" then
            program.comment=value
]]            
         elseif key == "icon" then
            program.icon=value
            
         elseif key == "categories" then
            program.categories=value
            
         elseif key == "exec" then
            pos = string.find(value," %%[fFuUdDnNickvm]")
            if pos ~= nil then
               program.exec = string.sub(value,1,pos-1)
            else
               program.exec=value
            end
            
         elseif key=="onlyshowin" and current_wm then
            if not string.find(value,current_wm) then
               program.hidden=true
            end
         end
      end
      line=desktop_file:read()
   end
   desktop_file:close()
   
   if program.terminal then
      program.exec = terminal .." ".. program.exec
   end
   
   return program
end


--- readDirectory(appdir)
-- lit non récursivement les fichiers .desktop du répertoire appdir.
function readDirectory(appdir)
   local appinfo
   local category
   local file
   local entry
   
   for file in lfs.dir(appdir) do
      if file ~= "." and file ~= ".." then
         appinfo = loadDesktop(appdir.."/"..file)
         if appinfo then
            if appinfo.type == "application" and not appinfo.hidden then
               category = returnCategory(appinfo)
               if category ~= nil then
                  if menu[category] == nil then menu[category] = {} end
                  menu[category][appinfo.name]={exec=appinfo.exec,icon=appinfo.icon}
               else
                  menu[appinfo.name]={exec=appinfo.exec,icon=appinfo.icon}
               end
            end
         end
      end
   end
end


--- generateMenuJWM
-- génère un menu dynamique pour JWM à intégrer dans .jwmrc avec
-- <Include>exec:lua /path/nomfichier.lua</Include>
function generateMenuJWM()
   print ("<JWM>")
   for i,k in pairs(menu) do
      if k.exec == nil then
         print("<Menu label=\""..i.."\">")
         for name,data in pairs(k) do
            print("  <Program icon=\"".. data.icon .."\" label=\"".. name .."\">".. data.exec .."</Program>")
         end
         print("</Menu>")
      else
         print("<Program icon=\"".. k.icon .."\" label=\"".. i .."\">".. k.exec .."</Program>")
         print("</item>")
      end
   end
   print("</JWM>")
end


--- generateMenuOpenBox
-- génère un menu dynamique pour OpenBox à intégrer dans menu.xml avec
-- <menu id="id" label="label" execute="lua /path/nomfichier.lua" />
-- et
-- <menu id="id" /> dans le menu "root-menu"
function generateMenuOpenBox()
   print ([[<openbox_pipe_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">]])
   for i,k in pairs(menu) do
      if k.exec == nil then
         print("<menu id=\"".. i .."\" label=\"".. i .."\">")
         for name,data in pairs(k) do
            print("  <item label=\"".. name .."\">")
            print("    <action name=\"Execute\"><execute>".. data.exec .."</execute></action>")
            print("  </item>")
         end
         print("</menu>")
      else
         print("<item label=\"".. i .."\">")
         print("  <action name=\"Execute\"><execute>".. k.exec .."</execute></action>")
         print("</item>")
      end
   end
   print("</openbox_pipe_menu>")
end

readDirectory("/usr/share/applications")
-- readDirectory("/home/mimas/.local/share/applications")

-- *** Choisir generateMenuJWM() ou generateMenuOpenBox ***
generateMenuOpenBox()

Attention, il faut installer lua.

source.

Enjoy ! big_smile

Super chouette! j'ai tout ce qu'il faut dans mon menu désormais! Le menu debian est bien, mais un peu fouillis (bien que plus complet). Ça fonctionne impec sous debian sid. J'ai juste le paquet lua installé (il l'était déja avec je ne sais quel autre programme)

Hors ligne

#22 Le 09/07/2009, à 13:25

Mopinou

Re : Postez ici vos Pipemenus Openbox!

c'est bon ! j'ai installer tous les paquets qui passaient par là : luarocks liblua5.1-filesystem-dev liblua5.1-filesystem0 lua40 et lua50. Et ca marche smile (il y a surement des paquets en trop.
par contre, je trouve que c'est le bazar dans ce menu ... il n'est pas rangé par ordre alphabétique et les menu sont a coté des fichiers/liens. Je trouve ca bizarre hmm

Hors ligne

#23 Le 12/08/2009, à 21:17

Kookaburra

Re : Postez ici vos Pipemenus Openbox!

--- generateMenuOpenBox
-- génère un menu dynamique pour OpenBox à intégrer dans menu.xml avec
-- <menu id="id" label="label" execute="lua /path/nomfichier.lua" />
-- et
-- <menu id="id" /> dans le menu "root-menu"

Là, je ne comprends pas ce qu'il faut mettre exactement dans son "menu.xml" ? (je veux dire à la place de "id", "label" et où ce met la dernière ligne ... Je suis paumé ! roll

Help me please 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

#24 Le 13/08/2009, à 09:58

Mopinou

Re : Postez ici vos Pipemenus Openbox!

Alors en fait tu a 2 choix de syntaxe :
- tu peux définir tes menu en haut de ton fichier menu.xml et ensuite appeler ces menu dans ton propre menu (entre les balises du menu "root-menu") juste grâce à l'id que tu leur aura attribué

- ou alors (c'est ce que je fait) du défini directement ton menu dans le "root-menu" : donc en gros tu met directement la ligne

<menu id="id" label="label" execute="lua /path/nomfichier.lua" />

à l'endroit où tu veux qu'il apparaisse

Hors ligne

#25 Le 14/08/2009, à 22:57

Кຼزດ

Re : Postez ici vos Pipemenus Openbox!

Mopinou a écrit :

c'est bon ! j'ai installer tous les paquets qui passaient par là : luarocks liblua5.1-filesystem-dev liblua5.1-filesystem0 lua40 et lua50. Et ca marche smile (il y a surement des paquets en trop.
par contre, je trouve que c'est le bazar dans ce menu ... il n'est pas rangé par ordre alphabétique et les menu sont a coté des fichiers/liens. Je trouve ca bizarre hmm

Je pense que tu peux essayer de garder uniquement liblua5.1-filesystem0(-dev ?) je pense que le moule lfs qui était manquant y fait référence.


dou

Hors ligne