File: mpc.el.html

This is an Emacs front end to the Music Player Daemon.

It mostly provides a browser inspired from Rhythmbox for your music collection and also allows you to play the music you select. The basic interface is somewhat unusual in that it does not focus on the playlist as much as on the browser. I play albums rather than songs and thus don't have much need for playlists, and it shows. Playlist support exists, but is still limited.

Bugs:

- when reaching end/start of song while ffwd/rewind, it may get wedged,
  signal an error, ... or when mpc-next/prev is called while ffwd/rewind.
- MPD errors are not reported to the user.

Todo:

- add bindings/buttons/menuentries for the various commands.
- mpc-undo
- visual feedback for drag'n'drop
- display/set repeat and random state (and maybe also crossfade).
- allow multiple *mpc* sessions in the same Emacs to control different mpds.
- fetch album covers and lyrics from the web?
- improve MPC-Status: better volume control, add a way to show/hide the
  rest, plus add the buttons currently in the toolbar.
- improve mpc-songs-mode's header-line column-headings so they can be
  dragged to resize.
- allow selecting several entries by drag-mouse.
- poll less often
  - use the idle command
  - do the time-ticking locally (and sync every once in a while)
  - look at the end of play time to make sure we notice the end
    as soon as possible
- better volume widget.
- add synthesized tags.
  e.g. pseudo-artist = artist + composer + performer.
  e.g. pseudo-performer = performer or artist
  e.g. rewrite artist "Foo bar & baz" to "Foo bar".
  e.g. filename regexp -> compilation flag
- window/buffer management.
- menubar, tooltips, ...
- add mpc-describe-song, mpc-describe-album, ...
- add import/export commands (especially export to an MP3 player).
- add a real notion of album (as opposed to just album-name):
  if all songs with same album-name have same artist -> it's an album
  else it's either several albums or a compilation album (or both),
  in which case we could use heuristics or user provided info:
  - if the user followed the 1-album = 1-dir idea, then we can group songs
    by their directory to create albums.
  - if a compilation flag is available, and if <=1 of the songs have it
    set, then we can group songs by their artist to create albums.
  - if two songs have the same track-nb and disk-nb, they're not in the
    same album. So from the set of songs with identical album names, we
    can get a lower bound on the number of albums involved, and then see
    which of those may be non-compilations, etc...
  - use a special directory name for compilations.
  - ask the web ;-)

Defined variables (32)

mpc-browser-tagsTags for which a browser buffer should be created by default.
mpc-cover-image-reIf non-nil, it is a regexp that should match a valid cover image.
mpc-data-directoryDirectory where MPC.el stores auxiliary data.
mpc-frame-alistAlist of frame parameters for the MPC frame.
mpc-hostHost (and port) where the Music Player Daemon is running.
mpc-mode-abbrev-tableAbbrev table for ‘mpc-mode’.
mpc-mode-hookHook run after entering MPC mode.
mpc-mode-mapKeymap for ‘mpc-mode’.
mpc-mode-menuMenu for MPC mode.
mpc-mode-syntax-tableSyntax table for ‘mpc-mode’.
mpc-mpd-music-directoryLocation of MPD’s music directory.
mpc-songs-formatFormat used to display each song in the list of songs.
mpc-songs-hashconsMake song file name objects unique via hash consing.
mpc-songs-mode-abbrev-tableAbbrev table for ‘mpc-songs-mode’.
mpc-songs-mode-hookHook run after entering MPC-song mode.
mpc-songs-mode-mapKeymap for ‘mpc-songs-mode’.
mpc-songs-mode-syntax-tableSyntax table for ‘mpc-songs-mode’.
mpc-songs-playlistName of the currently selected playlist, if any.
mpc-status-callbacksAlist associating properties to the functions that care about them.
mpc-status-mode-abbrev-tableAbbrev table for ‘mpc-status-mode’.
mpc-status-mode-hookHook run after entering MPC-Status mode.
mpc-status-mode-mapKeymap for ‘mpc-status-mode’.
mpc-status-mode-syntax-tableSyntax table for ‘mpc-status-mode’.
mpc-tagbrowser-dir-mode-abbrev-tableAbbrev table for ‘mpc-tagbrowser-dir-mode’.
mpc-tagbrowser-dir-mode-hookHook run after entering ’(MPC- mpc-tag-name) mode.
mpc-tagbrowser-dir-mode-mapKeymap for ‘mpc-tagbrowser-dir-mode’.
mpc-tagbrowser-dir-mode-syntax-tableSyntax table for ‘mpc-tagbrowser-dir-mode’.
mpc-tagbrowser-mode-abbrev-tableAbbrev table for ‘mpc-tagbrowser-mode’.
mpc-tagbrowser-mode-hookHook run after entering ’(MPC- mpc-tag-name) mode.
mpc-tagbrowser-mode-mapKeymap for ‘mpc-tagbrowser-mode’.
mpc-tagbrowser-mode-syntax-tableSyntax table for ‘mpc-tagbrowser-mode’.
mpc-volume-stepChange volume in increments of this integer.

Defined functions (111)

mpc()
mpc--debug(FORMAT &rest ARGS)
mpc--faster(EVENT SPEEDUP STEP)
mpc--faster-toggle(SPEEDUP STEP)
mpc--proc-alist-to-alists(ALIST)
mpc--proc-connect(HOST)
mpc--proc-filter(PROC STRING)
mpc--proc-quote-string(S)
mpc--status-idle-timer-stop(&optional REALLY)
mpc--status-timers-refresh()
mpc-assq-all(KEY ALIST)
mpc-cmd-add(FILES &optional PLAYLIST)
mpc-cmd-clear(&optional CALLBACK)
mpc-cmd-consume(&optional ARG)
mpc-cmd-delete(SONG-POSS &optional PLAYLIST)
mpc-cmd-find(TAG VALUE)
mpc-cmd-flush(TAG VALUE)
mpc-cmd-list(TAG &optional OTHER-TAG VALUE)
mpc-cmd-move(SONG-POSS DEST-POS &optional PLAYLIST)
mpc-cmd-pause(&optional ARG CALLBACK)
mpc-cmd-play(&optional SN)
mpc-cmd-random(&optional ARG)
mpc-cmd-repeat(&optional ARG)
mpc-cmd-seekcur(TIME)
mpc-cmd-single(&optional ARG)
mpc-cmd-special-tag-p(TAG)
mpc-cmd-stop(&optional CALLBACK)
mpc-cmd-update(&optional ARG CALLBACK)
mpc-compare-strings(STR1 STR2 &optional IGNORE-CASE)
mpc-constraints-get-current(&optional AVOID-BUF)
mpc-constraints-pop()
mpc-constraints-push(&optional NOERROR)
mpc-constraints-restore(CONSTRAINTS)
mpc-constraints-tag-lookup(BUFFER-TAG CONSTRAINTS)
mpc-drag-n-drop(EVENT)
mpc-event-set-point(EVENT)
mpc-ffwd(EVENT)
mpc-file-local-copy(FILE)
mpc-format(FORMAT-SPEC INFO &optional HSCROLL)
mpc-goto-playing-song()
mpc-intersection(L1 L2 SELECTFUN)
mpc-mode()
mpc-mode-menu(ARG1)
mpc-next()
mpc-pause()
mpc-play()
mpc-play-at-point(&optional EVENT)
mpc-playlist()
mpc-playlist-add()
mpc-playlist-create(NAME)
mpc-playlist-delete()
mpc-playlist-destroy(NAME)
mpc-playlist-rename(OLDNAME NEWNAME)
mpc-prev()
mpc-proc(&optional RESTART)
mpc-proc-buf-to-alist(&optional BUF)
mpc-proc-buf-to-alists(BUF)
mpc-proc-buffer(PROC USE &optional BUFFER)
mpc-proc-check(PROC)
mpc-proc-cmd(CMD &optional CALLBACK)
mpc-proc-cmd-list(CMDS)
mpc-proc-cmd-to-alist(CMD &optional CALLBACK)
mpc-proc-sync(&optional PROC)
mpc-proc-tag-string-to-sym(TAG)
mpc-quit()
mpc-read-seek(PROMPT)
mpc-reorder(&optional NODEACTIVATE)
mpc-resume()
mpc-rewind(EVENT)
mpc-ring-make(SIZE)
mpc-ring-pop(RING)
mpc-ring-push(RING VAL)
mpc-secs-to-time(SECS)
mpc-seek-current(POS)
mpc-select(&optional EVENT)
mpc-select-extend(&optional EVENT)
mpc-select-restore(SELECTION)
mpc-select-save(&rest BODY)
mpc-select-toggle(&optional EVENT)
mpc-separator(ACTIVE)
mpc-songpointer-context(SIZE PLBUF)
mpc-songpointer-score(CONTEXT POS)
mpc-songpointer-set(POS)
mpc-songs-hashcons(NAME)
mpc-songs-jump-to(SONG-FILE &optional POSN)
mpc-songs-kill-search()
mpc-songs-mode()
mpc-songs-search(STRING)
mpc-songs-selection()
mpc-sort(ACTIVE)
mpc-status-mode()
mpc-status-refresh(&optional CALLBACK)
mpc-status-stop()
mpc-stop()
mpc-tagbrowser(TAG)
mpc-tagbrowser-all-select()
mpc-tagbrowser-buf(TAG)
mpc-tagbrowser-dir-mode()
mpc-tagbrowser-dir-toggle(EVENT)
mpc-tagbrowser-mode()
mpc-tagbrowser-tag-name(TAG)
mpc-tempfiles-add(KEY FILE)
mpc-toggle-consume()
mpc-toggle-play()
mpc-toggle-repeat()
mpc-toggle-shuffle()
mpc-toggle-single()
mpc-union(&rest LISTS)
mpc-update()
mpc-volume-mouse-set(&optional EVENT)
mpc-volume-widget(VOL &optional SIZE)

Defined faces (0)