---
name: "Xmms"
section: "3pm"
platform: "linux"
package: "libxmms-perl"
version: "0.12-5.1"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/Xmms"
---

# Xmms(3pm)

Interactive remote control shell for xmms

## NAME

Xmms - Interactive remote control shell for xmms

## SYNOPSIS

```
  perl -MXmms -e shell
```

## DESCRIPTION

Xmms::shell provides an alternative or companion interface to the xmms gui.

Feature summary:

- Standard Play Controls

  play, pause, stop, next, prev, eject

- Standard Options

  toggle repeat, toggle shuffle

- Playlist Controls

  clear, select, add file(s), add url(s), playlist load/save, sort (more options than the gui)

- File Info

  search, view and edit mp3 tags

- Misc Controls

  time change (and slider), volume change (and slider), balance change,  window toggle

- Shell Features

  - command history

    - command/file completion

    - file matching

    - title matching

    - emacs key bindings

    ## Shell Command Summary

The complete list of shell commands is also available via the *help* command.

- add

  Add files to the current playlist, without clearing the current playlist. See also: *play* description of the special \`-' character.

- alias

  Alias a long command to one of your own definition, e.g.:

  ```
   xmms> alias cd play /cdrom
   xmms> cd
  ```

- balance

  View or change the balance.

- clear

  Clear the current playlist.

- current

  Display the current playlist track number, title, time, rate, frequency and mode.

- delete

  Delete tracks from the playlist.  (NOTE: at the time of this writing, the *patches/xmms-playlist-delete.pat* patch must be applied to  xmms-0.9.1.) Example:

  ```
   xmms> delete 3
  ```

  This command can also handle ranges, e.g. to play just your favorite tracks from and audio cd:

  ```
   xmms> play /cdrom
   xmms> delete 5, 7..10
  ```

- dig

  Search for mp3 files by mp3 tag or file name.  Root directory defaults to the last *play* command or greedy *dig* command.

  Example:

  ```
   #"greedy" match against *.mp3 filename and all tag info
   xmms> dig ~/mp3 gabba|break
  ```

  ```
   xmms> track
   1 - Prodigy - Break'n'Enter [0:11/5:59 (3%)]
   2 - gabba (6:12)
   3 - gabba (4:47)
   4 - break_and_enter_95_live (5:58)
   5 - Prodigy - Diesel Power (Snake break - Mi (7:08)
   6 - The Prodigy - Acid Break (4:42)
  ```

  ```
   #match against mp3 `artist' tag only
   xmms> dig artist maxim|liam
   1 - Biohazard feat. Maxim Reality - Breathe [0:03/3:33 (1%)]
   2 - Liam Howlett (DJ mix) - Heavyweight Selection XL Mix (19:37)
   3 - Maxim - Dog Day (4:41)
   4 - Maxim - Factory Girl (2:33)
  ```

  See also: *play* description of the special \`-' character.

- eject

  Just like pressing the *eject* button on the gui, pops up the *load* *file* window.  However, if an audio cd is/was playing (and Audio::CD is installed), the cd tray will pop open.  If an audio cd is *not*  playing, but you want to open the tray, provided the *cd* argument:

  ```
   xmms> eject cd
  ```

- export

  Make environment variables available to the shell, e.g.:

  ```
   xmms> export PWD
   xmms> play $PWD/fav.mp3
  ```

  ```
   xmms> export MP3_HOME=/usr/local/mp3
   xmms> play $MP3_HOME/fav.mp3
  ```

  ```
   xmms> export CD="play /cdrom"
   xmms> $CD
  ```

- files

  The current playlist with be reduced to files matching the given pattern. If no files match, the playlist is not changed. Example:

  ```
   xmms> files ro(ck|ll) #reduces playlist to files containing `rock' and `roll'
  ```

  To negate, use the ! prefix:

  ```
   xmms> files !fire    #removes files containing `fire' from the playlist
  ```

- help

  Print command summary.

- history

  This function adds a bit of functionality over the readline history. Mainly, ability to save and run history to and from files on disk. Example:

  ```
   xmms> play ~/mp3/favorites
   xmms> volume 40
   xmms> jtime 1 2:00
   xmms> jtime 2 0:45
   xmms> history >~/mp3/fav.hist #save current history
   xmms> history <~/mp3/fav.hist #read/run history from fav.hist
  ```

  TAB completion on the special character \`-' will recall the last directory from which a history script was read.   See also: *Xmms::SongChange*.

  If the file *~/.xmms/.perlrc* exists, it will be automatically run as a history script when the shell is invoked, before the prompt loop.  For example, my *~/.xmms/.perlrc* file looks like so:

  ```
   volume 30
   resume
  ```

  The *clear* subcommand can be used to clear the current history:

  ```
   xmms> history clear
  ```

- info

  This command will display information about the given track, where track is a number in the current playlist file.  The sub-commands can be used to edit the mp3 tag of the track file.  Example:

  ```
   xmms> info 2
   File........./usr/local/mp3/prodigy/rare/we_eat_rhythm.mp3
   Size......... 4.9M
   Modified.....Thu May 20 16:29:43 1999
   Album........deleted from Jilted Generation
   Artist.......The Prodigy
   Comment......?
   Genre........Electronic
   Title........We Eat Rhythm (Original Version)
   Tracknum.....?
   Year.........1994
   Time.........5:18
   ...
  ```

  ```
   xmms> info 2 comment Great Tune
   comment set to `Great Tune'
  ```

  ```
   xmms> info 2 comment
   Comment......Great Tune
  ```

- jtime

  This command jumps to the last time set by the *time* command and defaults to *0:00*.  For example:

  ```
   xmms> dig file speedway #load files with the name `speedway'
   xmms> time 1:10         #jump 1:10 into the song
   ... time passes ...
   xmms> jtime             #jump back to 1:10
  ```

  A two argument form of *jtime* can be used to set jump times for  tracks without actually jumping to that time, until *jtime* is called  in the no argument form.   I like this for playing my favorite parts of songs, example:

  ```
   #set jump times for these three tracks
   xmms> jtime 3 0:30
   xmms> jtime 4 1:00
   xmms> jtime 6 2:11
  ```

  See also, key bindings: *M-\\*

- list

  This command is used to load a playlist file or to save the current playlist  file to disk.

  Example:

  ```
   xmms> list save ~/mp3/fav-tracks #save list
   playlist saved
  ```

  ```
   xmms> list ~/mp3/fav-tracks      #load list
  ```

  To measure the size of a list:

  ```
   xmms> list size ~/mp3/slipknot.m3u
   slipknot_742617000027.mp3  560k
   slipknot_sic.mp3  3.1M
   ...
   Total: 40.2M
  ```

- mtime

  Mark the current output time for *jtime*.

- next

  Skip forward to next track in the playlist.

- pause

  Pause the current track in the playlist.

- play

  With no arguments, this command is just the same as hitting the gui play button.  When given an argument of a directory, file or file glob, the playlist will be set to these files.  Example:

  ```
   xmms> play ~/mp3/prodigy/remixes/
  ```

  ```
   xmms> play ~/mp3/prodigy/live/*skylined*
  ```

  TAB completion on the special character \`-' will recall the last directory used with the *add*, *play* or *dig* command, this value is also saved to your ~/.xmms/config file, so it is always available. Example:

  ```
   xmms> play -<TAB>
  ```

  completes to:

  ```
   xmms> play /home/dougm/mp3/prodigy/remixes/
  ```

- prev

  Skip backward to previous track in the playlist.

- quit

  Quit the xmms shell.

- repeat

  Toggle the *repeat* button.

- resume

  This command will restore the xmms state to where it was just before the last *quit* command was run.  That is, it will load the saved playlist and jump to the list position and output time where xmms was just before quitting.  The playlist, position and output time are saved in *~/.xmms/config*.

- shuffle

  Toggle the *shuffle* button.

- sort

  Sort the playlist various ways:

  - access

    Sort by last file access time.

  - album

    Sort by *album* mp3 tag.

  - artist

    Sort by *artist* mp3 tag.

  - comment

    Sort by *artist* mp3 tag.

  - file

    Sort by file basename.

  - genre

    Sort by *genre* mp3 tag.

  - large

    Sort by file size, from large to small.

  - new

    Sort by file modification time, from new to old.

  - old

    Sort by file modification time, from old to new.

  - order

    Sort the list by order of your choice, e.g.:

    ```
     xmms> play /cdrom
     xmms> sort order 3, 10, 6..9, 1
    ```

    Tracks not specified in the new order are left out of the new playlist.

  - path

    Sort by filename, including the path name.

  - random

    Sort in random order.

  - reverse

    Reverse the playlist order.

  - small

    Sort by file size, from small to large.

  - title

    Sort by title name.

  - tracknum

    Sort by *tracknum* mp3 tag.

  - year

    Sort by *year* mp3 tag.

- time

  With no argument, this command will display the elapsed, total and remaining percentage time of the current track. When given a *+N* argument, it will jump the song forward *N* seconds. When given a *-N* argument, it will jump the song backward *N* seconds. *+\<TAB*\> and *-\<TAB*\> can be used a slider for moving forward and backward.  Finally, a *mm:ss* argument will jump to that time in the song. Oh, and *time \<TAB*\> will complete to the form *0:00..mm:ss*, which will jump to a random time in the song.

- titles

  This function works just the same as the *files* function, but matches against playlist titles.

- track

  This function is used for interacting with the current playlist. With no arguments, it will print the entire list. When given a range argument, it will print the info for those tracks, for example:

  ```
   xmms> track 100..230
  ```

  Given a number or title name, it will jump to that track in the playlist.

- url

  Add a url to the playlist for streaming. TAB completion on the special character \`-' will recall the last url used with this command.

  If *Xmms::shell* finds the *$ENV{HOME}/.xmms/.perlurldb* file when starting up, the urls in this file will be used for url tab completion.

- volume

  View or change the volume. With no argument, this command displays the current volume percentage. With an argument, changes the volume to the given percentage. *+\<TAB*\> and *-\<TAB*\> can be used a slider for moving raising and lowering the volume.  The up/down arrow keys are also bound to this slider.

- window

  This command is used to *show* or *hide* the xmms windows. If the shell is started and xmms is not already running, all windows will be hidden by default.

## Key Bindings

Here is a list of some of the more useful key bindings.  \`C' is shorthand for the *control* key, \`M' is shorthand for the *meta* key, which is normally the *escape* key.

- C-a : move to beginning of the line

  - C-b : move backward one character

  - C-c : interrupt

  - C-d : delete next character

  - C-e : move to end of the line

  - C-f : more forward one character

  - C-h : delete previous character

  - TAB : complete

  - C-k : kill line

  - C-l : clear screen

  - C-n : next command in history list

  - C-p : previous command in history list

  - C-r : reverse search in history list

  - C-s : forward search in history list

  - C-t : transpose characters

  - C-u : discard line

  - C-y : yank line

  - M-\< : beginning of history

  - M-\> : end of history

  - M-b : move backward one word

  The following key bindings are shortcuts specific to xmms:

- up arrow : volume slide up

  - down arrow : volume slide down

  - M-= : next

  - MΩ- : prev

  - M-. : stop

  - M-/ : play

  - M-\\ : jtime

  - M-m : mtime

  - M-, : pause

  - M-~ : shuffle

  - M-@ : repeat

  - M-\` : run previous command in history list

  - M-1 : play track 1 in the playlist

  - M-2 : play track 2 in the playlist (and so on to #9)

  The nice part about these key bindings is the single-keystoke-ness and  that they are not added to the command history, leaving just the more complex commands in your history buffer.

Effective use of these bounds keys can actually make up a half-assed sampler too.

The following key bindings will toggle the xmms windows:

- M-a : all windows

  - M-w : main window

  - M-l : playlist window

  - M-q : equalizer window

  ## Command Aliases

A command abbreviation table is built at startup to provide the following command aliases:

```
   a     => add
   b     => balance
   ch    => change
   cl    => clear
   cr    => crop
   cu    => current
   de    => delete
   di    => dig
   e     => eject
   f     => files
   he    => help
   hi    => history
   i     => info
   j     => jtime
   l     => list
   m     => mtime
   n     => next
   pa    => pause
   pl    => play
   pr    => prev
   q     => quit
   rep   => repeat
   res   => resume
   sh    => shuffle
   so    => sort
   st    => stop
   tim   => time
   tit   => titles
   tr    => track
   u     => url
   v     => volume
   w     => window
```

## SEE ALSO

[*xmms*(1)](/xmms/1.md), *Xmms::SongChange*(3), *Xmms::Remote*(3), *Xmms::Config*(3), *MPEG::MP3Info*(3)

## AUTHOR

Doug MacEachern
