ranger で選択ファイルを mpc add するコマンド

~/.config/ranger/commands.py に追加すると :mpcadd が使えるようになるでよ。

class mpcadd(Command):
  """
  :mpcadd

  """

  MPC_ROOT = '/home/anekos/data/music/'

  def execute (self):
    from os.path import isdir, join, relpath, splitext
    from os import walk, system
    from ranger.ext.shell_escape import shell_quote
    from re import search

    targets = []
    cwd = self.fm.thisdir

    if len(cwd.marked_items) > 0:
      targets = cwd.marked_items
    elif len(self.fm.env.copy) > 0:
      targets = self.fm.env.copy
    elif len(cwd.get_selection()) > 0:
      targets = cwd.get_selection()

    def add(file):
      _, ext = splitext(file)
      if search('^\.(mp3)$', ext):
        system('mpc add ' + shell_quote(file.replace(self.MPC_ROOT, '')))

    for target in targets:
      if isdir(target.path):
        for root, dir, files in walk(target.path):
          for file in sorted(files):
            add(join(root, file))
      else:
        add(target.path)

もっとうまくやれそうな気がする。