mingus

Homepage: https://github.com/pft/mingus

Updated:

Summary

MPD Interface

Commentary

Mingus is a client for the Music Player Daemon (MPD).  It provides an
interactive interface, where most emphasis lies on on-screen display/editing
of the playlist, and browsing in a buffer.  However, minibuffer operations are
becoming more intelligent with each version (with completive browsing
somewhat like in `find-file', and searching on multiple fields, also with
auto-completion).

Installation (Melpa)
====================

Mingus is now installable from Melpa, and this is the preferred method.

NOTE if you want to use the mingus-stays-home library (see below),
you still will have to put

(require 'mingus-stays-home)

in your init file.

For non-Melpa installs, see below.

Usage
=====

After installation the following commands will be available:

1) M-x mingus-help shows the Mingus help buffer;
2) M-x mingus will show the playlist;
3) M-x mingus-browse navigates your music collection.

You can switch between these buffers with keys 1: help, 2: playlist, 3: browser.

For other key bindings, see M-x mingus-help.

Mingus-stays-home
=================

When the computer running the mpd service is the same as the one from which
mingus is being run, you may use the library mingus-stays-home.
This library can provide stuff such as:

- id3 tagging
- cd-burning
- integration with dired and the shell

Check the file mingus-stays-home.el itself if you want to know
more.

Non-Melpa Installation
======================

Make sure you have libmpdee.el in your load-path.  NOTE for old-time users:
mpc is not required anymore.  Everything is done in lisp.  This also means that
mingus has become multi-platform (in an easy way).

1. When you install both the main mingus AND mingus-stays-home:

byte-compile, IN ORDER, repeat: IN ORDER, the files mingus.el and
mingus-stays-home.el

Add the following to your .emacs:

(add-to-list 'load-path "/path/where/mingus-and-mingus-stays-home-reside")
(autoload 'mingus "mingus-stays-home" nil t)

2. Mingus only (so NO mingus-stays-home) :

byte-compile the file mingus.el

Add the following to your .emacs:

(add-to-list 'load-path "/path/where/mingus/resides")
(autoload 'mingus "mingus" nil t)

Design Issues
=============

No editing of metadata tags is provided in mingus itself.  This is because mpd is
designed to be run in a network as a server (although it can be used on a single
system, which, in fact, is what I do); as such, clients to mpd are unaware of mpd's
root dir, and possibly/probably do not have write permissions on the music
files.

If you DO use mingus-stays-home, rough metadata-editing IS provided.  `mingus-id3-set'
tries to guess the values for artist, song, track number, and album from the name
encountered in the playlist.  Use it with caution though, as as I said, it is still
rough, e.g. having to abstract away from differences between the various tagging
formats.  I AM looking into taglib for an elegant solution.  But that will take some
time.  So be patient.

The interface is roughly based on that on ncmpc.  Many keybindings are alike,
except for some notoriously vi-style-ones.  Some significant features (main
reasons to write this stuff) :

MARKING Notice specifically the possibility to mark multiple songs in the playlist
for movement or deletion (by pressing the spacebar one toggles the mark at the
current line; if there is a region, it marks all songs in the region.) Pressing 'y'
asks for a regular expression against which to match the songs.  Pressing 'Y' unmarks
alike.  If a song matches, it is marked.  Unmarking all marks happens with a single
capital "U".

INSERTION POINT Another nice feature is "mingus-set-insertion-point" (Key:
"i") : mark a song after which you would like your next insertions to take
place.  Then go inserting.  Unset this behaviour with "u"
(mingus-unset-insertion-point), and songs will be added to 3the end of the
playlist again.  As of version 0.24 this is NOT time-consuming.  Yeah!

NOTE: right now these two functions are mutually exclusive.

Dired
=====

Ability to snap to the file location of a song instantly in `dired', so as
to perform file management or other actions on these files easily (such as
removal, movement or renaming), or just to check wtfs '3.ogg' actually
refers to.

You might want to change the `dired-mode-map' so that it will play well with
Mingus.  If you want to, you can set the variable `mingus-dired-add-keys' to
t; this can be done with `mingus-customize'.  It will set "SPC" to
`mingus-dired-add', "C-u SPC" to `mingus-dired-add-and-play' and add an item
for `mingus-dired-add' to the menu-bar in dired.  `mingus-dwim-add' and
`mingus-dwim-add-and-play' (see below) calls mingus-dired-add when in dired,
so binding this to a global key might be a nice solution too.

For those already familiar with mpd, and have set that up, you're done now.

If you get a message like

MPD_HOST and/or MPD_PORT environment variables are not set message: problems
getting a response from "localhost" on port 6600 : Connection refused

there are two options:

1. you want to run locally, so run mpd
first.  Do so from somewhere else or simply evaluate (mingus-start-daemon).
On some configurations of mpd this must be done as root.

For those unfamiliar with mpd, to set it up, put something like the following
in ~/.mpdconf (this is for when run a user)

port                "6600"
music_directory     "/your/music/directory"
playlist_directory  "~/playlists"
log_file            "~/.mpd.log"
message_file        "~/.mpd.err"

then run mpd

2. you want to connect to a remote host, but have not set the
environment variables MPD_HOST and/or MPD_PORT.  Do so by calling
(mingus-set-variables-interactively) (settings lost when emacs
restarted) or by means of customization (mingus-customize) or
(customize-group 'mingus).

NEW in mingus 0.21: `mingus-wake-up-call'; fixed the lisp-max-eval-depth
error message when leaving mingus-info on for a while; allowing spaces in
minibuffer operations, such as loading and saving of playlists, radio-streams
and the like, but most of all: inclusion of mingus-stays-home, which provides
nice integration features.  See that file for more information.  Emacs21
compatablity, except for parts of mingus-stays-home.

Known bugs
==========

* a file name cannot have a double quotes (") or a backtick (`) in it.  Do not
know how to fix that, so if anyone feels so inclined... You CAN query your
database (M-x mingus-query-regexp " RET) to know if you are in the possession
of such files, so you can adjust their names (with mingus-stays-home
installed: press 0 (zero) to go to dired to do so). The only way to insert
such files currently is by inserting their parent directory.

point-of-insertion only works with one file or directory at a time

Dependencies