• [^] # Re: Pas convaincu

    Posté par . En réponse au journal La stratégie de Mozilla pour les jeux vidéo sur le Web ouvert. Évalué à 1.

    Tu n'as pas forcément besoin de connaître bash… Juste la manière d'utiliser dmenu. dmenu prend une liste en entrée et renvoie le choix de l'utilisateur. Tu peux générer cette liste avec du C++, du Python, du shell… Perso, j'irai sur une approche shell bien plus (extrêmement) naïve, de ce genre :

     #!/bin/sh
     find_desktops() {
     find /usr/share/applications/ -name '*.desktop'
     }
     list_apps() {
     for desktopfile in $(find_desktops); do
    basename $desktopfile | sed "s/.desktop$//"
     done
     } 
     app_to_file() {
     find /usr/share/applications/ -name "$@.desktop"
     }
     desktop_to_command() {
     grep -e "Exec=" "$@" | sed "s/Exec=//" | cut -d" " -f1
     }
     app="$(list_apps | dmenu)"
     file="$(app_to_file $app)"
     cmd="$(desktop_to_command $file)"
     exec $cmd
    
    

    Certes, c'est beaucoup moins efficace, mais ça demande pas un très haut niveau en shell. Si tu tiens absolument à générer ta liste avec du C++, tu peux écrire deux programmes en C++ (un qui génère la liste, un qui lance l'application), puis faire la glue en shell, comme ça :

     #!/bin/sh
     exec $(list-apps-in-cpp|dmenu|appname-to-command)
    
    

    (|appname-to-command est optionnel si ta liste est déjà une liste de commandes, bien entendu)

    Au final, tu auras au moins évité de réécrire ce que fait dmenu : l'affichage de la liste et le choix dans celle-ci.

    Bref, vu ton commentaire, dmenu semble correspondre à ton besoin. Faut juste que tu remplaces dmenu_run par ton propre code ^^