naughty_status.rb - cmus/cmus GitHub Wiki

This is for awesome WM users only. It requires ruby to run.

This script displays status differently depending on hostname, so that the same configuration shows large cover art on the second screen for my desktop and a smaller display on the main screen for my laptop. Naughty has plenty of other options, see here.

  #!/usr/bin/env ruby
  # encoding: UTF-8
  
  # Hash contains:
  #{
  #    "status"=>"playing",
  #    "file"=>"/my/music/path.mp3",
  #    "artist"=>"Some Artist",
  #    "album"=>"Some Album",
  #    "tracknumber"=>"0",
  #    "title"=>"Some song",
  #    "date"=>"2000",
  #    "duration"=>"288"
  #}
  i = Hash[ARGV.each_slice(2).to_a]
  
  # process variables that need it
  artist      = i['artist']
  album       = i['album']
  date        = i['date']
  tracknumber = i['tracknumber'].to_i
  title       = i['title']
  status      = i['status'].capitalize
  
  # build the text string
  text = artist || "Unknown Artist"
  text += " / #{album}" if album
  text += " (#{date})" if date
  text += "\\n"
  text += "#{"%02d" % tracknumber} - " if tracknumber
  text += title || "Untitled track"
  
  # put on second screen on desktop, also make art bigger
  if %x{hostname}.chomp == 'box'
      screen = 2
      icon_size = 400
  else
      screen = 1
      icon_size = 200
  end
  
  # build the command
  naughty_command = %Q<naughty.notify({title="#{status}", text="#{text}", timeout=8, screen=#{screen},>
  if i['artist'] && i['album']
      naughty_command += %Q< icon="/path/to/art/#{artist}--#{album}.jpg", icon_size=#{icon_size}>
  end
  naughty_command += %Q<})>
  
  # pipe the Naughty command to awesome-client
  IO::popen('awesome-client -', 'w'){|io| io << naughty_command}