Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[FVWM TIP] menu "music player"
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
knefas
l33t
l33t


Joined: 21 Dec 2003
Posts: 828

PostPosted: Sun Jan 09, 2005 2:00 pm    Post subject: [FVWM TIP] menu "music player" Reply with quote

L'altro giorno mi sono messo a smanettare con i menu di fvwm, sono veramente potenti. Mi e' venuto in mente di usarli per avere una specie di "player", usando mpc e mpd.
In pratica e' un menu dinamico che consente di aggiungere e togliere mp3 alla playlist di mpd, vedere la playlist, fare play/stop/pause ecc...ecc...

Il tutto si compone di alcune righe da aggiungere a .fvwm2rc e di uno scriptino in python (il mio primo scriptino in python, quindi sara' pieno di errori -> ogni suggerimento e' ben accetto!)


Righe da aggiungere a .fvwm2rc
Code:
DestroyMenu MenuMpc
AddToMenu MenuMpc
+ DynamicPopupAction PipeRead `fvwm-menu-mpc -c`

### Stile del menu, ho dovuto metterlo per rallentare un po' il delay dei popup che altrimenti
### 'poppavano" troppo velocemente e con la tastiera non ci stavo dietro ;)
MenuStyle MpcMenu TitleUnderlines0,Hilight3DThin, PopupOffset 0 100, PopupDelay 2000
MenuStyle MpcMenu MenuColorset 0, HilightBack, ActiveColorset 1,BorderWidth 1
MenuStyle MpcMenu Font "Shadow=0 1 SE:xft:Sans:size=11", ItemFormat "%.2|%.5i%.5l%.5i%2.3>%2|",AnimationOff

####### PopUpMancanti. 
DestroyFunc FuncFvwmMenuDirectory
AddToFunc FuncFvwmMenuDirectory
+ I PipeRead `case "$0" in \
        $[fvwm_audio_dir]*) fvwm-menu-directory --menu-style="MpcMenu" --dir "$0" --command-title='Exec exec ls -dp1 "%d/"* |grep -v "\/$"| sed \"s|$[fvwm_audio_dir]/||\" |mpc add' \
        --command-file='Exec exec mpc add "$(echo \"%f\" | sed \"s|$[fvwm_audio_dir]/||\")"' ;; \
        "playlist") fvwm-menu-mpc --playlist;; \
        esac; `

DestroyFunc FuncFvwmMenuPlaylist
AddToFunc FuncFvwmMenuPlaylist
+ I PipeRead `fvwm-menu-mpc -n \"$0\"`


ovviamente bisogna aggiungere da qualche parte nei menu un "popup MenuMpc", ad esempio io ho aggiunto in MenuFvwmRoot la riga
Code:
+ %cdaudio_mount.png%"MusicPlayer" Popup MenuMpc


poi c'e' bisogno dello script in python fvwm-menu-mpc, che io ho messo in /usr/bin come fvwm-menu-directory, ma basta che sia da qualche parte del PATH e che sia resto eseguibile
Code:
chmod +x /usr/bin/fvwm-menu-mpc


qui c'e' lo script (l'ho detto, essendo il mio primo probabilmente e' molto poco ottimizzato e potrebbe essere molto migliorato... :oops:)
Code:
#! /usr/bin/env python

import os,string,re,sys,getopt

def printHelp():
    print "usage:\n\
-h\t--help\t\tprints this help and exit\n\
-n #xx\t--traknum\treturns the menu for xx track\n\
-p\t--playlist\treturns the menu for the playlist\n\
-c\t--curret\treturns the menu with the current song at the top\n"

def getCommandOutput(command):
    child = os.popen(command)
    data = child.read()
    err = child.close()
    if err:
       raise RuntimeError, '%s failed w/ exit code %d' % (command, err)   
    return data


def popAction(trakn):
    menu = getCommandOutput("mpc playlist")
    menu = menu[0:-1].split('\n')
    menuActHeader = "DestroyMenu \"%s\"\nAddToMenu \"%s\"\n+ DynamicPopDownAction DestroyMenu \"%s\"\n" % (trakn,trakn,trakn)
    trnum = int(re.search("#\d*",trakn).group()[1:])
    menu = '+ %%player_play.png%%"Play" Exec exec mpc play %d' % trnum \
       + '\n+ %%editdelete.png%%"Delete" Exec exec mpc del %d' % trnum \
       + "\n+ \"\" Nop" \
       + '\n+ %%up.png%%"Move up" Exec exec mpc move %d %d' % (trnum, trnum - 1) \
            + '\n+ %%down.png%%"Move down" Exec exec mpc move %d %d' % (trnum,  trnum + 1)

    print  menuActHeader + menu

def popPlay():
    menu = getCommandOutput("mpc playlist")
    menu = menu[0:-1].split('\n')
    menuPlHeader = "DestroyMenu recreate \"playlist\"\nAddToMenu \"playlist\"\n+ DynamicPopDownAction DestroyMenu \"playlist\"\n\
+MissingSubmenuFunction FuncFvwmMenuPlaylist\n"
    menu = ["+ %%knob.png%%\"%s\" popup \"playActions%s\" item +100 c" % (elem,elem) for elem in menu]
    menu = '\n'.join(menu)
    print menuPlHeader + menu


def getcurrent():
   current = getCommandOutput("mpc")
   current = current[0:-1].split('\n')
   
   if len(current) > 2:
      currentSong = "DestroyMenu recreate MenuMpc\nAddToMenu MenuMpc\n+ \"%s\" Title\n+ \"%s\" Title\n+ \"\" Nop\n"\
                % (current[0],current[1].replace('%','%%'))
   else:
      currentSong= "DestroyMenu recreate MenuMpc\nAddToMenu MenuMpc\n+ \"None\" Title\n"
   print  currentSong + "+ MissingSubmenuFunction FuncFvwmMenuDirectory\n\
+ %player_playlist_2.png%\"Add\" Popup $[fvwm_audio_dir]\n\
+ %player_playlist.png%\"Playlist\" Popup playlist\n\
+ %editdelete.png%\"Clear\" Exec exec mpc clear\n\
+ \"\" Nop\n\
+ %player_play.png%\"Play\" Exec exec mpc play\n\
+ %player_pause.png%\"Pause\" Exec exec mpc pause\n\
+ %player_stop.png%\"Stop\"  Exec exec mpc stop\n\
+ \"\" Nop\n\
+ %player_fwd.png%\"Next\" Exec exec mpc next\n\
+ %player_rew.png%\"Prev\" Exec exec mpc prev\n\
+ \"\" Nop\n\
+ %reload.png%\"Repeat\" Exec exec mpc repeat\n\
+ %roll.png%\"Random\" Exec exec mpc random\n\
+ %rebuild.png%\"Shuffle\" Exec exec mpc shuffle\n"

def main(argv):   
    try:                               
        opts, args = getopt.getopt(argv, "n:cph",["traknum", "current","playlist","help"])
    except getopt.GetoptError:
        print "unknown argument,quitting"
        sys.exit(2)
   
    for opt, arg in opts:
        if opt in ("-n","--traknum"):
      popAction(arg)
      sys.exit(0)
        elif opt in ("-c","--current"):
      getcurrent()
      sys.exit(0)
   elif opt in ("-p","--playlist"):   
           popPlay()
      sys.exit(0)
   elif opt in ("-h","--help"):   
           printHelp()
      sys.exit(0)

if __name__ == "__main__":
    main(sys.argv[1:])


per comodita' ho anche messo dei keybindings a mpc, i miei sono questi:

Code:
#mpc commands
Key Space A 4 Exec exec mpc play
Key Space A M Exec exec mpc pause
Key S A 4 Exec exec mpc stop
Key N A 4 Exec exec mpc next
Key P A 4 Exec exec mpc prev

#popup MenuMpc 1 fa il popup per aggiungere un mp3
Key A A 4 popup MenuMpc 1

Key Menu A N popup MenuMpc



ah, aggiungo un paio di screen shots (sono di altervista, per cui se non vanno taglia&incolla nella barra degli indirizzi)

http://knefas.altervista.org/img/add.jpg
http://knefas.altervista.org/img/menu.jpg
http://knefas.altervista.org/img/play.jpg

le icone sono prese da quelle del kde o di gnome, se qualcuno le volesse posso fare un tar

con cio' dovrebbe essere tutto, spero di non aver fatto errori copiando e incollando (spero che le righe lunghe non si siano spezzate...) e che magari qualcuno lo trovi utile!

ciao! :)
Back to top
View user's profile Send private message
iDreamer
Guru
Guru


Joined: 23 Jan 2004
Posts: 317
Location: Corigliano Calabro(CS)

PostPosted: Sun Jan 09, 2005 2:07 pm    Post subject: Reply with quote

forte peccato che non uso questo wm..... :?
_________________
.::..::.iDreamer.::..::.
^__^ -> HH: Happy Hacking
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum