1.\" Copyright (c) 2010, 2011 Ryan Flannery <ryan.flannery@gmail.com>
2.\"
3.\" Permission to use, copy, modify, and distribute this software for any
4.\" purpose with or without fee is hereby granted, provided that the above
5.\" copyright notice and this permission notice appear in all copies.
6.\"
7.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14.\"
15.Dd $Mdocdate$
16.Dt VITUNES 1
17.Os
18.Sh NAME
19.Nm vitunes
20.Nd A curses media indexer and player for vi-users
21.Sh SYNOPSIS
22.Nm vitunes
23.Op Fl c Ar command
24.Op Fl d Ar database-file
25.Op Fl e Ar command Op argument ...
26.Op Fl f Ar config-file
27.Op Fl m Ar media-backend
28.Op Fl p Ar playlist-dir
29.Sh DESCRIPTION
30.Nm
31is a curses-based music player and playlist manager for *nix whose goals are
32a minimalistic appearance, strong vi-like bindings, and quick playlist
33creation/management.
34.Pp
35It is not intended to be a feature-rich media player, but rather a quick,
36vi-like media indexer and playlist manager that also happens to be able to
37play the media it indexes (via
38.Xr mplayer 1 ).
39.Pp
40.Nm
41accepts the following command line options:
42.Bl -tag -width Fl
43.It Fl c Ar command
44Execute the specified command in the currently running
45.Nm
46instance, and exit.  This is useful for controlling
47.Nm
48from other windows or scripts.
49.Pp
50The commands that may be specified are both those named in the
51.Sx RUN-TIME COMMANDS
52section below and keybindings specified by their keybinding action name,
53listed in the
54.Sx KEYBINDING ACTIONS
55section below.
56.Pp
57To execute multiple commands, use this option repeatedly as
58.Dl $ vitunes -c command1 -c command2 ...
59.Pp
60For example, to have the currently running
61.Nm
62load and play a playlist, one could issue:
63.Dl $ vitunes -c So playlist SomePlaylist Sc -c media_play
64.Pp
65Note that for this to work, when
66.Nm
67starts up it attempts to create a socket at
68.Pa /tmp/.vitunes
69that are used by this option to communicate with the original instance.
70If this socket cannot be created for any reason, this option will not work.
71.It Fl d Ar database-file
72Specifies the database containing all known media files and their meta
73information that
74.Nm
75should use.
76If you're using this option in conjunction with an e-command, this option
77.Sy must
78be specified before the e-command.
79.Pp
80The default location is
81.Pa ~/.vitunes/vitunes.db .
82.It Fl e Ar command Cm options
83Execute one of the available e-commands to manipulate the database that
84.Nm
85uses.
86See the section below titled
87.Sx E-COMMANDS
88for more information.
89.It Fl f Ar config-file
90Specifies the path of the configuration file
91.Nm
92should load.
93See the section below titled
94.Sx CONFIGURATION FILE
95for information on what the configuration may contain.
96.Pp
97The default location is
98.Pa ~/.vitunes/vitunes.conf .
99.It Fl m Ar media-backend
100Specify the media backend to use for playback.  The current list of supported
101media backends are:
102.Bl -tag -width "mplayer"
103.It Cm mplayer
104Uses a
105.Xr fork 2
106/
107.Xr execvp 3 'd
108instance of
109.Xr mplayer 1
110for all playback.  Note that the mplayer binary
111.Sy must
112be in your
113.Ev PATH
114environment variable.
115.El
116.Pp
117Currently only
118.Cm mplayer
119is supported.
120.It Fl p Ar playlist-dir
121Specifies the directory containing all of the playlists
122.Nm
123will load and use.
124Any new playlists created while running
125.Nm
126will be created here.
127.Pp
128The default location is
129.Pa ~/.vitunes/playlists/ .
130.El
131.Ss Getting Started
132.Nm
133works by maintaining a database of tagged media files.
134The database
135.Sy must
136be created and populated before
137.Nm
138can be run normally.
139.Pp
140After that, files can be added, modified, or removed from the database, and
141on the next invocation,
142.Nm
143will see the changes (additionally, the database can be re-loaded at runtime).
144.Bl -bullet
145.It
146All database management is done using "e-commands", which are always of the
147form:
148.Dl $ vitunes -e command-name [ parameters ... ]
149.It
150Once the database has been created,
151.Nm
152can be run normally with the following:
153.Dl $ vitunes
154.It
155All playlist management is done while
156.Nm
157is running normally.
158.El
159.Pp
160See the
161.Sx E-COMMANDS
162section below for more information on database management.
163To get started quickly, simply do the following:
164.Bl -enum
165.It
166Create initial empty database with
167.Dl $ vitunes -e init
168.It
169Add files to your database with
170.Dl $ vitunes -e add ~/music/  /path/to/more/music/
171.It
172Then just start normally with
173.Dl $ vitunes
174.El
175.Ss The Display
176When run normally, the default display will show the following 4 windows:
177.Bl -tag -width Fl
178.It player
179This window occupies the top row of the display and contains information about
180the currently playing song (if any) and the current play-mode.
181.It command/status
182This window occupies the bottom row of the display.
183It behaves very similar to the command/status window in
184.Xr vi 1 .
185.It library
186This window occupies the left-side of the screen and shows each playlist, in
187addition to the library and filter-buffer.
188The filter buffer is where the results of every
189.Pf : Ic filter Ar ...
190command are temporarily stored.
191.br
192Playlists with unsaved changes appear bold and have their name preceded with
193a '+'.
194.It playlist
195This window is to the right of the library window and occupies most of the
196display.
197It shows the contents of whichever playlist has currently been selected in
198the library window.
199.El
200.Ss Useful Keybindings
201The following is only a partial listing keybindings, but are the most
202frequently used.
203.Bl -tag -width Ds
204.It Cm Enter
205Load the selected playlist for viewing or begin playback of the selected file.
206.It Cm Tab
207Toggle focus between the library and playlist windows.
208.It Cm z
209Pause playback.
210.It Cm s
211Stop playback.
212.It Cm f/b
213Seek forwards/backwards 10 seconds.
214.It Cm F/B
215Seek forwards/backwards 1 minute.
216.It Cm m
217In the playlist window, show/hide information for the current file.
218.El
219.Pp
220See the
221.Sx KEYBINDING ACTIONS
222section for a complete listing.
223.Sh E-COMMANDS
224Below is a brief summary of each e-command available in
225.Nm .
226More detailed usage information and examples for each can be obtained by
227issuing:
228.Dl $ vitunes -e help command-name
229.Bl -tag -width Ds
230.It Nm Fl e Cm init
231Create the necessary database file and playlist directory used by
232.Nm .
233This command only needs to be run once, when
234.Nm
235is first run.
236If either of these already exist, they remain unchanged.
237.It Nm Fl e Cm add Ar path1 Op Ar path2 ...
238This command takes any number of files/directories as parameters.
239Each file is scanned for meta-information and if found, added to the
240database.
241Directories are search recursively.
242.Pp
243.Xr TagLib 3
244is used for all meta-extraction, which includes the following fields:
245album, artist, comment, play-length, title, track number, and year.
246.It Nm Fl e Cm addurl Ar url
247This command is used to add non-files (things like URL's for Internet radio
248stations) to the database, where the meta-information cannot be determined
249automatically.
250It can also be used to update the meta-info of an existing URL in the
251database.
252.Pp
253After executing, you are prompted to enter all of your own information.
254.It Nm Fl e Cm check Oo Fl rsd Oc Ar file1 Op Ar file2 ...
255Scan the files specified and display their meta-information as present in
256the files themselves or in the
257.Nm
258database.
259This is useful for checking if a file is in the database.
260.It Nm Fl e Cm flush Op Fl t Ar time-format
261Dump the contents of the database to stdout in an easy-to-parse format,
262optionally with the specified
263.Xr strftime 3
264compatible format for times.
265.It Nm Fl e Cm help Ar command
266Display detailed usage information and examples for the e-command specified
267by
268.Ar command .
269.It Nm Fl e Cm rm Oo Fl f Oc Ar file/url
270Remove a file/URL from the database.
271.It Nm Fl e Cm rmfile Oo Fl f Oc Ar file/url
272Alias for the "rm" e-command.
273.It Nm Fl e Cm tag Oo options Oc Ar file1 Op Ar file2 ...
274Add/modify the meta-information tags of raw files.
275There are many options to this e-command.
276See the help page for more information:
277.Dl $ vitunes -e help tag
278.It Nm Fl e Cm update Op Fl s
279Load the existing database and check each file to see if its meta-information
280has been updated, or if the file has been removed.
281The database is updated accordingly.
282.El
283.Sh RUN-TIME COMMANDS
284Below is a listing of all run-time commands supported by
285.Nm .
286.Pp
287All commands are entered by typing ':' followed by the command name and any
288parameters (just like in
289.Xr vi 1 ).
290.Pp
291Note that abbreviations are also supported.
292That is, entering any non-ambiguous abbreviation of a command name will also
293execute the command.
294.Bl -tag -width Ds
295.It Pf : Ic bind Ar action Ar keycode
296This will bind the action specified by
297.Ar action
298to the keycode specified by
299.Ar keycode .
300After this command is issued, entering the inputting the specified
301.Ar keycode
302will result in firing the specified
303.Ar action .
304.Pp
305See the section
306.Sx SPECIFYING KEYCODES
307for details on how to specify
308.Ar keycode ,
309and section
310.Sx KEYBINDING ACTIONS
311for a listing of all actions
312.Nm
313supports.
314.It Pf : Ic color Cm item Ns = Ns Ar fg Ns , Ns Ar bg
315Change the color of the given
316.Cm item
317to
318.Ar fg
319colored text on a
320.Ar bg
321colored background.
322.Pp
323Available values for
324.Cm item
325are:
326.Pp
327.Bl -tag -width "playing-playlist" -compact -offset indent
328.It Em Item Name
329.Em Description
330.It Cm bars
331The bars dividing the various windows.
332.It Cm player
333The player window.
334.It Cm status
335The status window.
336.It Cm library
337The library window.
338.It Cm playlist
339The playlist window.
340.It Cm errors
341Error messages in the status window.
342.It Cm messages
343Informational messages in the status window.
344.It Cm tildas-library
345The tildas in empty rows of the library window.
346.It Cm tildas-playlist
347The tildas in empty rows of the playlist window.
348.It Cm playing-library
349Currently playing playlist in the library window.
350.It Cm playing-playlist
351Currently playing file in the playlist window.
352.It Cm current-inactive
353Current row in the inactive window.
354.It Cm artist
355The artist column in the playlist window.
356.It Cm album
357The album column in the playlist window.
358.It Cm title
359The title column in the playlist window.
360.It Cm track
361The track column in the playlist window.
362.It Cm year
363The year column in the playlist window.
364.It Cm genre
365The genre column in the playlist window.
366.It Cm comment
367The comment column in the playlist window.
368.It Cm length
369The play-length column in the playlist window.
370.El
371.Pp
372Available colors for
373.Ar fg
374and
375.Ar bg
376are: white, black, red, green, yellow, blue, magenta, cyan, and default.
377The color default is whatever the terminal uses as the default foreground
378or background color.
379.It Pf : Ic display Pq Cm reset | Cm show | Ar display-description
380The display command is used to change which columns are displayed in the
381playlist window, their order, their width, and their alignment.
382.Pp
383The format of
384.Ar display-description
385is a comma separated list of:
386.Qq Oo Ar \&- Oc Ns Ar field . Ns Ar size .
387.Pp
388Valid values for
389.Ar field
390are: album, artist, comment, genre, length, title, track, and year.
391The
392.Ar size
393field indicates the number of columns.
394If
395.Ar field
396is preceded with a
397.Ar \&-
398the field will be right-aligned.
399As an example, the command:
400.Pp
401.Pf : Ic display Ar title.10,artist.20,-track.4
402.Pp
403would only show the title, artist, and track fields, in that order, where the
404title field is 10 columns wide, the artist field is 20 columns wide, and the
405track field is 4 columns wide and right-aligned.
406.Pp
407The default display can be restored with:
408.Pp
409.Pf : Ic display Cm reset
410.Pp
411The current display description can be seen with:
412.Pp
413.Pf : Ic display Cm show
414.Pp
415.It Pf : Ic filter Ns Oo ! Oc Ar token Op Ar token2 ...
416The filter command is used to filter out all songs from the currently viewed
417playlist that do not match (or do match) the provided list of tokens.
418A song matches the list of tokens if each token appears somewhere in the
419song's meta-information or filename.
420.Pp
421If
422.Qq Pf : Ic filter
423is used, all records not matching the list of tokens are removed from the
424current playlist.
425If
426.Qq Pf : Ic filter!
427is used, all records that do match the list of tokens are removed from the
428current playlist.
429.Pp
430The list of tokens is simply any list of strings, each possibly preceded with
431an exclamation point.
432If a token is preceded with an exclamation point, it will only match a song
433if it does not appear anywhere in the song's meta-information or filename.
434.Pp
435For example, the following:
436.Pp
437.Pf : Ic filter Ar nine nails
438.Pp
439would match all songs that contained both "nine" and "nails", and remove all
440other songs from the current playlist.
441However,
442.Pp
443.Pf : Ic filter! Ar nine nails
444.Pp
445would remove all songs that DO contain both "nine" and "nails."
446.Pp
447The query:
448.Pp
449.Pf : Ic filter Ar nine !nails
450.Pp
451would match all songs that contain "nine" and NOT "nails".
452All other songs would be removed from the current playlist.
453.It Pf : Ic mode Pq Cm linear | Cm loop | Cm random
454Set the current playmode to one of the three available options.
455The options are:
456.Bl -tag -width Fl
457.It Cm linear
458Songs in a playlist are played in the order they appear until the end is
459reached.
460.It Cm loop
461Like linear, but when the end of the playlist is reached, playback continues
462at the beginning of the playlist.
463.It Cm random
464Songs are chosen at random from the playlist.
465.El
466.It Pf : Ic new Op Ar name
467Create a new, empty playlist.  If
468.Ar name
469is provided, the new playlist will be named accordingly unless a playlist
470with that name already exists.
471If no name is provided, the default is "untitled".
472.It Pf : Ic playlist Ar name
473Load the playlist named by
474.Ar name
475in the playlist window.
476.It Pf : Ic q Ns Oo ! Oc
477Quit
478.Nm .
479If there are playlists with unsaved changes, then you are notified of this and
480prevented from quitting.
481You can forcefully quit by using
482.Pf : Ic q Ns ! ,
483and any unsaved changes to any playlists will be lost.
484.Pp
485Note that playlists with unsaved changes appear bold in the library window.
486.It Pf : Ic reload Pq Cm db | Cm conf
487The reload command is used to reload either the database or configuration
488file while
489.Nm
490is running.
491Handy if you update your database using an e-command while also running
492.Nm .
493.It Pf : Ic set Cm property Ns = Ns Ar value
494The set command is used to set various properties within vitunes.
495For properties that accept a value of
496.Ar bool ,
497valid values are 'true' and 'false'.
498.Pp
499The following properties are available:
500.Bl -tag -width Fl
501.It Cm lhide Ns = Ns Ar bool
502If set to true, the library window will be hidden (disappear) when it does
503not have focus.
504.It Cm lwidth Ns = Ns Ar number
505Set the width of the library window to
506.Ar number
507columns wide.
508Note that the number provided must be greater than 0 and less than the width
509of the terminal.
510.It Cm match-fname Ns = Ns Ar bool
511When searching or filtering a playlist, normally the filenames are also
512included in the matching algorithm.
513This can sometimes be undesirable, particularly if, for example, all of your
514music/media reside in a directory named "media" and you're trying to search
515for a file with the word "media" in the title.
516.Pp
517To disable this behavior, set match-fnames to false.
518.It Cm save-sorts Ns = Ns Ar bool
519Most operations that change a playlist (such as paste/cut) set
520the 'needs-saving' flag on the playlist, such that you are prompted on
521exiting vitunes that there is a playlist with unsaved changes.
522By default, sorting a playlist does not do this.
523.Pp
524To change this behavior, and be prompted to save sorts on exit, set this
525option to true.
526.El
527.It Pf : Ic sort Ar sort-description
528Sort the currently viewing playlist using the provided
529.Ar sort-description ,
530which is a comma separated list of:
531.Qq Oo Ar \&- Oc Ns Ar field ,
532specifying which fields to sort by and if they should be sorted
533ascending or descending.
534.Pp
535Valid values for
536.Ar field
537are: album, artist, comment, genre, length, title, track, and year.
538Each field is sorted ascending by default, unless the field is preceeded
539with the dash
540.Ar \&- ,
541in which case that field is sorted descending.
542.Pp
543As an example, the following command:
544.Pp
545.Ic :sort artist,-album,title
546.Pp
547would sort all records in the current playlist by artist (ascending) first,
548then album-name (descending), then title (ascending).
549.Pp
550Note that while most operations on playlists set the "needs-saving" flag
551(so you are prompted when quiting
552.Nm
553that the playlist has unsaved changes), sorting a playlist does not do this.
554This is intentional.
555If you wish this behavior to be changed, see the "save-sorts" option for the
556.Ic set
557command.
558.It Pf : Ic toggle Ar register Ar command-list
559This command will associate a list of commands specified by
560.Ar command-list
561to register
562.Ar register .
563Once set, the list of commands can be quickly toggled through using the
564.Ic toggle_forward
565and
566.Ic toggle_backward
567keybindings (which default to
568.Ic t
569and
570.Ic T ,
571respectively).
572.Pp
573Toggle-lists can be useful to quickly alternate through, for example, various
574sorting or display schemes that the user may prefer.
575.Pp
576.Ar register
577is any single lower-case letter (a - z) or uppercase letter (A - Z).
578.Ar command-list
579is any list of valid commands listed here, each separated by a backslash
580character '/'.
581.Pp
582As an example, the following would allow one to quickly toggle through various
583sorting schemes:
584.Pp
585.Ic toggle s sort artist,-year,track / sort artist,album,track / sort -year
586.Pp
587Once issued, the three individual sorts specified above can be toggled using
588the
589.Ar s
590register.  With the default keybindings this would be done using either
591.Ar ts
592(to toggle forward through the list) or
593.Ar Ts
594(to toggle backward through the list).
595.It Pf : Ic unbind Pq Cm * | Cm action Ar action | Cm key Ar keycode
596This command is used to remove existing keybindings.
597It has three forms.
598The first is simply:
599.Pp
600.Ic unbind Ar *
601.Pp
602which will remove all existing keybindings.
603This is handy in a configuration file where you may want to define all custom
604keybindings.
605Issuing this at runtime will leave you with an instance of
606.Nm
607that will not respond to any keybdings!
608.Pp
609The second form is used to unbind actions:
610.Pp
611.Ic unbind action Ar action
612.Pp
613This will remove any keybindings for the action specified by
614.Ar action .
615.Pp
616The third form is used to unbind keys:
617.Pp
618.Ic unbind key Ar keycode
619.Pp
620This will remove any action currently bound to the key specified by
621.Ar keycode .
622.Pp
623See the section
624.Sx SPECIFYING KEYCODES
625for details on how to specify
626.Ar keycode ,
627and section
628.Sx KEYBINDING ACTIONS
629for a listing of all actions
630.Nm
631supports.
632.It Pf : Ic w Ns Oo ! Oc Op Ar name
633Save the currently viewing playlist.
634If a
635.Ar name
636is provided, then the playlist will be saved with this new name.
637If, however, a playlist already exists with that name, then you will be
638prevented from saving with that name unless '!' is provided, in which case
639the existing playlist with that name will be deleted.
640.El
641.Sh SPECIFYING KEYCODES
642This section describes how to specify keycodes used in both the
643.Pf : Ic bind
644and
645.Pf : Ic unbind
646commands.
647.Pp
648Keycodes are specified in the following fashion:
649.Pp
650.Dl Oo Cm Control Oc Pq Ar key | Ar SpecialKey
651.Pp
652Here,
653.Ar key
654is used to specify the actual, printable character entered which is
655case-sensitive (e.g. 'j', 'p', 'P'), and
656.Ar SpecialKey
657is used to specify various non-printable characters (such as the Page-Up
658key).
659.Pp
660If the string
661.Qq Control
662is also specified, then the keycode only applies when the control key is
663pressed in conjunction with the
664.Ar key
665or
666.Ar SpecialKey .
667.Pp
668Although
669.Cm key
670is case-sensitive ('p' and 'P' are treated differently), both
671.Ar SpecialKey
672and
673.Qq Control
674are case-insensitive.
675.Pp
676The currently supported list of non-printable characters available for
677.Ar SpecialKey
678are:
679.Pp
680.Bl -column -compact -offset indent "ValueX" "DescriptionX"
681.It Em Value         Ta Em Description
682.It Cm PageUp        Ta The page-up key.
683.It Cm PageDown      Ta The page-down key.
684.It Cm Up            Ta The up-arrow key.
685.It Cm Down          Ta The down-arrow key.
686.It Cm Left          Ta The left-arrow key.
687.It Cm Right         Ta The right-arrow key.
688.It Cm Backspace     Ta The backspace key.
689.It Cm Enter         Ta The enter key.
690.It Cm Space         Ta The space key.
691.It Cm Tab           Ta The tab key.
692.El
693.Pp
694Some examples of using keycodes and the
695.Pf : Ic bind
696run-time command are:
697.Bd -literal
698   bind  paste_after   p
699   bind  paste_before  P
700
701   bind  scroll_up_halfpage    Control u
702   bind  scroll_down_halfpage  Control d
703.Ed
704.Sh KEYBINDING ACTIONS
705The current list of available actions that keys may be bound to is the
706following.
707For each action, the default keys bound to them are also listed.
708.Bl -tag -width "scroll_down_wholepage"
709.It Em Action Name
710.Em Description
711.It Cm scroll_up
712Scroll the current row in the current window up by one line.
713.br
714DEFAULT BINDINGS:
715.Cm k, -, Up
716.It Cm scroll_down
717Scroll the current row in the current window down by one line.
718.br
719DEFAULT BINDINGS:
720.Cm j, Down
721.It Cm scroll_up_page
722Scroll the current window up by one line.
723.br
724DEFAULT BINDINGS:
725.Cm Control y
726.It Cm scroll_down_page
727Scroll the current window down by one line.
728.br
729DEFAULT BINDINGS:
730.Cm Control e
731.It Cm scroll_up_halfpage
732Scroll the current window up one half-page.
733.br
734DEFAULT BINDINGS:
735.Cm Control u
736.It Cm scroll_down_halfpage
737Scroll the current window down one half-page.
738.br
739DEFAULT BINDINGS:
740.Cm Control d
741.It Cm scroll_up_wholepage
742Scroll the current window up one whole page.
743.br
744DEFAULT BINDINGS:
745.Cm Control b, PageUp
746.It Cm scroll_down_wholepage
747Scroll the current window down one whole page.
748.br
749DEFAULT BINDINGS:
750.Cm Control f, PageDown
751.It Cm scroll_left
752Scroll the current window to the left one column.
753.br
754DEFAULT BINDINGS:
755.Cm h, Left, Backspace
756.It Cm scroll_right
757Scroll the current window to the right one column.
758.br
759DEFAULT BINDINGS:
760.Cm l, Right, Space
761.It Cm scroll_leftmost
762Scroll the current window to the left as far as possible.
763.br
764DEFAULT BINDINGS:
765.Cm ^, 0, \&|
766.It Cm scroll_rightmost
767Scroll the current window to the right as far as possible.
768.br
769DEFAULT BINDINGS:
770.Cm $
771.It Cm jumpto_screen_top
772Move the current line to the first line in the current window.
773.br
774DEFAULT BINDINGS:
775.Cm H
776.It Cm jumpto_screen_middle
777Move the current line to the middle line in the current window.
778.br
779DEFAULT BINDINGS:
780.Cm M
781.It Cm jumpto_screen_bottom
782Move the current line to the bottom line in the current window.
783.br
784DEFAULT BINDINGS:
785.Cm L
786.It Cm jumpto_line
787Jump to either a specified line (if a global input number is present) or to
788the last line in the current window's buffer.
789.br
790DEFAULT BINDINGS:
791.Cm G
792.It Cm jumpto_percent
793Using the global input number N, jump to the line N% the way through the
794current window's buffer.
795.br
796DEFAULT BINDINGS:
797.Cm %
798.It Cm go
799Go to a specific location within the current window.  This is planned to be
800similar to
801.Xr vim 1 's
802use of the 'g' keybinding, with multiple suffixes.  For now, only 'gg' is
803supported, and this takes you to the first line in the current window's
804buffer.
805.br
806DEFAULT BINDINGS:
807.Cm g
808.It Cm search_forward
809Begin a search for the entered string searching forward in the current window.
810The current row will be updated to the next matching row.
811.br
812DEFAULT BINDINGS:
813.Cm /
814.It Cm search_backward
815Begin a search for the entered string searching backwards in the current
816The current row will be updated to the next matching row.
817window.
818.br
819DEFAULT BINDINGS:
820.Cm \&?
821.It Cm find_next_forward
822Using the previous search-string, search in the same direction as the search
823was input for the next matching row.
824.br
825DEFAULT BINDINGS:
826.Cm n
827.It Cm find_next_backward
828Using the previous search-string, search in the opposite direction as the
829search was input for the next matching row.
830.br
831DEFAULT BINDINGS:
832.Cm N
833.It Cm cut
834Remove the following N lines from the current window, placing them in the copy
835buffer, where N is the global input number.
836Note that if the library window is active, only one row (playlist) can be
837cut/deleted at a time, and that this action cannot be undone.
838.br
839DEFAULT BINDINGS:
840.Cm d
841.It Cm visual
842Begin visual mode.  This is only available in the playlist window, and once
843begun, only keybindings that move the cursor within the current window are
844allowed.  Visual mode is exited when either a yank or delete operation has
845been performed, or when the Escape key is pressed.
846.br
847DEFAULT BINDINGS:
848.Cm v, V
849.It Cm yank
850Copy the following N lines from the current window into the copy buffer, where
851N is the global input number.
852This action cannot be used in the library window.
853.br
854DEFAULT BINDINGS:
855.Cm y
856.It Cm paste_after
857Paste the contents of the copy buffer after the current row in the playlist
858window.
859This action cannot be used in the library window.
860.br
861DEFAULT BINDINGS:
862.Cm p
863.It Cm paste_before
864Paste the contents of the copy buffer before the current row in the playlist
865window.
866This action cannot be used in the library window.
867.br
868DEFAULT BINDINGS:
869.Cm P
870.It Cm undo
871Undo the previous action on the currently viewed playlist.
872This action cannot be used in the library window.
873.br
874DEFAULT BINDINGS:
875.Cm u
876.It Cm redo
877Redo the previously undone action on the currently viewed playlist.
878This action cannot be used in the library window.
879.br
880DEFAULT BINDINGS:
881.Cm Control r
882.It Cm quit
883Exit
884.Nm .
885If there are unsaved changes in any playlists you will be prevented from
886exiting until you either save those changes or issue a ":q!" command.
887.br
888DEFAULT BINDINGS:
889.Cm Control c, Control /
890.It Cm redraw
891Clear and re-draw the entire display.
892.br
893DEFAULT BINDINGS:
894.Cm Control l
895.It Cm command_mode
896Enter command-mode, where the commands listed in the
897.Sx RUN-TIME COMMANDS
898section may be issued.
899.br
900DEFAULT BINDINGS:
901.Cm \&:
902.It Cm shell
903Enter a command to be executed outsite of
904.Nm
905and in the current shell environment.
906The output of the execution is shown before control and the display returns to
907.Nm .
908.br
909DEFAULT BINDINGS:
910.Cm \&!
911.It Cm switch_windows
912Toggle focus between the library and playlist windows.
913.br
914DEFAULT BINDINGS:
915.Cm Tab
916.It Cm show_file_info
917Show the file information (including meta-information) for the current row/file
918in the playlist window.
919This action does not work in the library window.
920.br
921DEFAULT BINDINGS:
922.Cm m
923.It Cm load_playlist
924Load the playlist specified by the current row in the library window.
925.br
926DEFAULT BINDINGS:
927.Cm Enter
928.It Cm media_play
929Begin playing the file specified by the current row in the playlist window.
930.br
931DEFAULT BINDINGS:
932.Cm Enter
933.It Cm media_pause
934Pause playback of any playing media.
935.br
936DEFAULT BINDINGS:
937.Cm z
938.It Cm media_stop
939Stop all playback of any playing media.
940.br
941DEFAULT BINDINGS:
942.Cm s
943.It Cm seek_forward_seconds
944Seek forwards 10 seconds in any playing media.
945.br
946DEFAULT BINDINGS:
947.Cm f, \&]
948.It Cm seek_backward_seconds
949Seek backwards 10 seconds in any playing media.
950.br
951DEFAULT BINDINGS:
952.Cm b, \&[
953.It Cm seek_forward_minutes
954Seek forwards 1 minute in any playing media.
955.br
956DEFAULT BINDINGS:
957.Cm F, \&}
958.It Cm seek_backward_minutes
959Seek backwards 1 minute in any playing media.
960.br
961DEFAULT BINDINGS:
962.Cm B, \&{
963.It Cm media_next
964Play the next song in the playlist.
965.br
966DEFAULT BINDINGS:
967.Cm \&)
968.It Cm media_prev
969Play the previous song in the playlist.
970.br
971DEFAULT BINDINGS:
972.Cm \&(
973.It Cm volume_decrease
974Decrease the volume.
975.br
976DEFAULT BINDINGS:
977.Cm <
978.It Cm volume_increase
979Increase the volume.
980.br
981DEFAULT BINDINGS:
982.Cm >
983.It Cm toggle_forward
984Execute the next command from the toggle list specified by the provided
985register.
986.br
987DEFAULT BINDINGS:
988.Cm t
989.It Cm toggle_backward
990Execute the previous command from the toggle list specified by the provided
991register.
992.br
993DEFAULT BINDINGS:
994.Cm T
995.El
996.Pp
997Some examples of using the above actions and keycodes to define the default
998keybdings are:
999.Bd -literal
1000   bind  paste_after   p
1001   bind  paste_before  P
1002
1003   bind  scroll_up_halfpage    Control u
1004   bind  scroll_down_halfpage  Control d
1005.Ed
1006.Sh CONFIGURATION FILE
1007The configuration file loaded by
1008.Nm
1009is relatively straight-forward.
1010Each line may be one of the following:
1011.Pp
1012.Bl -bullet -compact
1013.It
1014A comment, which starts with a '#'.
1015.It
1016An empty line.
1017.It
1018One of the commands from the
1019.Sx RUN-TIME COMMANDS
1020section above.
1021.El
1022.Pp
1023That's it.
1024As such, review the list of commands above.
1025.Pp
1026An example configuration file that would setup some hideous DOS-like colors
1027is:
1028.Bd -literal
1029   # setup colors
1030   color bars=white,blue
1031   color player=yellow,blue
1032   color library=green,blue
1033   color playlist=white,blue
1034   color status=red,blue
1035
1036   # format for playlist window
1037   display artist.20,album.20,title.20,track.4,year.4
1038
1039   # show most recent work of an artist first in library window
1040   sort artist,-year
1041
1042   # make library window 20 columns wide and hide when not active
1043   set lwidth=20
1044   set lhide=true
1045.Ed
1046.Sh FILES
1047.Bl -tag -width Ds -compact
1048.It Pa ~/.vitunes/vitunes.conf
1049Default configuration file.
1050.It Pa ~/.vitunes/vitunes.db
1051Default database file.
1052.It Pa ~/.vitunes/playlists/
1053Default playlist directory.
1054.It Pa /tmp/.vitunes
1055Default location for the socket created on start-up that can be used to control
1056.Nm .
1057.It Pa /usr/local/bin/mplayer
1058Default path to the
1059.Xr mplayer 1
1060binary.
1061.El
1062.Sh SEE ALSO
1063.Xr mplayer 1 ,
1064.Xr realpath 3 ,
1065.Xr strftime 3 ,
1066.Xr vi 1 .
1067.Pp
1068More information about TagLib can be found on the TagLib website:
1069.Lk http://developer.kde.org/~wheeler/taglib.html
1070.Pp
1071The
1072.Nm
1073website has additional information, such as a list of frequently asked
1074questions, a mailing list, and up-to-date bug information.
1075.Pp
1076.Lk http://www.vitunes.org
1077.Sh AUTHORS
1078.Nm
1079was written by
1080.An Ryan Flannery Aq Mt ryan.flannery@gmail.com .
1081.Sh BUGS
1082None known.
1083.Pp
1084If you happen to find any, please send a detailed description to me at
1085.Mt ryan.flannery@gmail.com .
1086