##### General rules #####
##
## 1) Because each action has runtime checks whether it's
##    ok to run it, a few actions can be bound to one key.
##    Actions will be bound in order given in configuration
##    file. When a key is pressed, first action in order
##    will test itself whether it's possible to run it. If
##    test succeeds, action is executed and other actions
##    bound to this key are ignored. If it doesn't, next
##    action in order tests itself etc.
##
## 2) It's possible to bind more that one action at once
##    to a key. It can be done using the following syntax:
##
##    def_key "key"
##      action1
##      action2
##      ...
##
##    This creates a chain of actions. When such chain is
##    executed, each action in chain is run until the end of
##    chain is reached or one of its actions fails to execute
##    due to its requirements not being met. If multiple actions
##    and/or chains are bound to the same key, they will be
##    consecutively run until one of them gets fully executed.
##
## 3) When ncmpcpp starts, bindings configuration file is
##    parsed and then ncmpcpp provides "missing pieces"
##    of default keybindings. If you want to disable some
##    bindings, there is a special action called 'dummy'
##    for that purpose. Eg. if you want to disable ability
##    to crop playlists, you need to put the following
##    into configuration file:
##
##    def_key "C"
##      dummy
##
##    After that ncmpcpp will not bind any default action
##    to this key.
##
## 4) To let you write simple macros, the following special
##    actions are provided:
##
##    - push_character "character" - pushes given special
##      character into input queue, so it will be immediately
##      picked by ncmpcpp upon next call to readKey function.
##      Accepted values: mouse, up, down, page_up, page_down,
##      home, end, space, enter, insert, delete, left, right,
##      tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\,
##      ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace.
##      In addition, most of these names can be prefixed with
##      alt-/ctrl-/shift- to be recognized with the appropriate
##      modifier key(s).
##
##    - push_characters "string" - pushes given string into
##      input queue.
##
##    - require_runnable "action" - checks whether given action
##      is runnable and fails if it isn't. This is especially
##      useful when mixed with previous two functions. Consider
##      the following macro definition:
##
##      def_key "key"
##        push_characters "custom_filter"
##        apply_filter
##
##      If apply_filter can't be currently run, we end up with
##      sequence of characters in input queue which will be
##      treated just as we typed them. This may lead to unexpected
##      results (in this case 'c' will most likely clear current
##      playlist, 'u' will trigger database update, 's' will stop
##      playback etc.). To prevent such thing from happening, we
##      need to change above definition to this one:
##
##      def_key "key"
##        require_runnable "apply_filter"
##        push_characters "custom_filter"
##        apply_filter
##
##      Here, first we test whether apply_filter can be actually run
##      before we stuff characters into input queue, so if condition
##      is not met, whole chain is aborted and we're fine.
##
##    - require_screen "screen" - checks whether given screen is
##      currently active. accepted values: browser, clock, help,
##      media_library, outputs, playlist, playlist_editor,
##      search_engine, tag_editor, visualizer, last_fm, lyrics,
##      selected_items_adder, server_info, song_info,
##      sort_playlist_dialog, tiny_tag_editor.
##
##    - run_external_command "command" - runs given command using
##      system() function.
##
## 5) In addition to binding to a key, you can also bind actions
##    or chains of actions to a command. If it comes to commands,
##    syntax is very similar to defining keys. Here goes example
##    definition of a command:
##
##      def_command "quit" [deferred]
##        stop
##        quit
##
##    If you execute the above command (which can be done by
##    invoking action execute_command, typing 'quit' and pressing
##    enter), ncmpcpp will stop the player and then quit. Note the
##    presence of word 'deferred' enclosed in square brackets. It
##    tells ncmpcpp to wait for confirmation (ie. pressing enter)
##    after you typed quit. Instead of 'deferred', 'immediate'
##    could be used. Then ncmpcpp will not wait for confirmation
##    (enter) and will execute the command the moment it sees it.
##
##    Note: while command chains are executed, internal environment
##    update (which includes current window refresh and mpd status
##    update) is not performed for performance reasons. However, it
##    may be desirable to do so in some situration. Therefore it's
##    possible to invoke by hand by performing 'update enviroment'
##    action.
##
## Note: There is a difference between:
##
##         def_key "key"
##           action1
##
##         def_key "key"
##           action2
##
##       and
##
##         def_key "key"
##           action1
##           action2
##
##      First one binds two single actions to the same key whilst
##      second one defines a chain of actions. The behavior of
##      these two is different and is described in (1) and (2).
##
## Note: Function def_key accepts non-ascii characters.
##
##### List of unbound actions #####
##
## The following actions are not bound to any key/command:
##
##  - set_volume
##
#
#def_key "mouse"
#  mouse_event
#
def_key "k"
	scroll_up
#
#def_key "shift-up"
#  select_item
#  scroll_up
#
def_key "j"
	scroll_down
#
#def_key "shift-down"
#  select_item
#  scroll_down
#
#def_key "["
#  scroll_up_album
#
#def_key "]"
#  scroll_down_album
#
#def_key "{"
#  scroll_up_artist
#
#def_key "}"
#  scroll_down_artist
#
#def_key "page_up"
#  page_up
#
#def_key "page_down"
#  page_down
#
def_key "g"
	move_home
#
def_key "G"
	move_end
#
#def_key "insert"
#  select_item
#
def_key "enter"
	enter_directory
#
def_key "enter"
	toggle_output
#
def_key "enter"
	run_action
#
def_key "enter"
	play_item
#
def_key "a"
	add_item_to_playlist
#
#def_key "space"
#	toggle_lyrics_update_on_song_change
#
def_key "v"
	toggle_visualization_type
#
def_key "x"
	delete_playlist_items
#
def_key "x"
	delete_browser_items
#
def_key "x"
	delete_stored_playlist
#
def_key "l"
	next_column
#
def_key "l"
	slave_screen
#
#def_key "right"
#  volume_up
#
#def_key "+"
#  volume_up
#
def_key "h"
	previous_column
#
def_key "h"
	master_screen
#
#def_key "left"
#  volume_down
def_key "up"
  volume_up
def_key "down"
  volume_down
#
#def_key "-"
#  volume_down
#
#def_key ":"
#  execute_command
#
#def_key "tab"
#  next_screen
#
#def_key "shift-tab"
#  previous_screen
#
def_key "?"
	show_help
#
def_key "p"
	show_playlist
#
def_key "b"
	show_browser
#
def_key "b"
	change_browse_mode
#
def_key "s"
	show_search_engine
#
def_key "s"
	reset_search_engine
#
def_key "m"
	show_media_library
#
def_key "m"
	toggle_media_library_columns_mode
#
def_key "p"
	show_playlist_editor
#
def_key "t"
	dummy
#	show_tag_editor
#
def_key "o"
	show_outputs
#
def_key "v"
	show_visualizer
#
#def_key "="
#  show_clock
#
#def_key "@"
#  show_server_info
#
def_key "S"
	stop
#
def_key "space"
	pause
#
#def_key ">"
#  next
#
#def_key "<"
#  previous
#
#def_key "ctrl-h"
#  jump_to_parent_directory
#
#def_key "ctrl-h"
#  replay_song
#
#def_key "backspace"
#  jump_to_parent_directory
#
#def_key "backspace"
#  replay_song
#
def_key "ctrl-right"
	seek_forward
#
def_key "ctrl-left"
	seek_backward
#
#def_key "r"
#  toggle_repeat
#
#def_key "z"
#  toggle_random
#
#def_key "y"
#  save_tag_changes
#
#def_key "y"
#  start_searching
#
#def_key "y"
#  toggle_single
#
#def_key "R"
#  toggle_consume
#
#def_key "Y"
#  toggle_replay_gain_mode
#
#def_key "T"
#  toggle_add_mode
#
#def_key "|"
#  toggle_mouse
#
#def_key "#"
#  toggle_bitrate_visibility
#
#def_key "Z"
#  shuffle
#
#def_key "x"
#  toggle_crossfade
#
#def_key "X"
#  set_crossfade
#
#def_key "u"
#  update_database
#
#def_key "ctrl-s"
#  sort_playlist
#
#def_key "ctrl-s"
#  toggle_browser_sort_mode
#
#def_key "ctrl-s"
#  toggle_media_library_sort_mode
#
#def_key "ctrl-r"
#  reverse_playlist
#
#def_key "ctrl-f"
#  apply_filter
#
#def_key "ctrl-_"
#  select_found_items
#
#def_key "/"
#  find
#
#def_key "/"
#  find_item_forward
#
#def_key "?"
#  find
#
#def_key "?"
#  find_item_backward
#
#def_key "."
#  next_found_item
#
#def_key ","
#  previous_found_item
#
#def_key "w"
#  toggle_find_mode
#
#def_key "e"
#  edit_song
#
#def_key "e"
#  dummy
#  edit_library_tag
#
#def_key "e"
#  edit_library_album
#
#def_key "e"
#  edit_directory_name
#
#def_key "e"
#  edit_playlist_name
#
def_key "e"
  edit_lyrics

#def_key "i"
#  show_song_info
#
#def_key "I"
#  show_artist_info
#
#def_key "g"
#  jump_to_position_in_song
#
def_key "L"
	show_lyrics
#
def_key "V"
	select_range
#
#def_key "i"
#	reverse_selection
#
def_key "escape"
	remove_selection
#
#def_key "B"
#  select_album
#
#def_key "a"
#  add_selected_items
#
#def_key "c"
#  clear_playlist
#
#def_key "c"
#  clear_main_playlist
#
#def_key "C"
#  crop_playlist
#
#def_key "C"
#  crop_main_playlist
#
def_key "alt-k"
	move_sort_order_up
#
def_key "alt-k"
	move_selected_items_up
#
def_key "alt-j"
	move_sort_order_down
#
def_key "alt-j"
	move_selected_items_down
#
#def_key "M"
#  move_selected_items_to
#
#def_key "A"
#  add
#
#def_key "S"
#  save_playlist
#
#def_key "o"
#  jump_to_playing_song
#
#def_key "G"
#  jump_to_browser
#
#def_key "G"
#  jump_to_playlist_editor
#
#def_key "~"
#  jump_to_media_library
#
def_key "E"
	dummy
#
#def_key "U"
#  toggle_playing_song_centering
#
#def_key "P"
#  toggle_display_mode
#
#def_key "\\"
#  toggle_interface
#
#def_key "!"
#  toggle_separators_between_albums
#
#def_key "L"
#  toggle_lyrics_fetcher
#
#def_key "F"
#  fetch_lyrics_in_background
#
#def_key "alt-l"
#  toggle_fetching_lyrics_in_background
#
#def_key "ctrl-l"
#  toggle_screen_lock
#
#def_key "`"
#  toggle_library_tag_type
#
#def_key "`"
#  refetch_lyrics
#
#def_key "`"
#  add_random_items
#
#def_key "ctrl-p"
#  set_selected_items_priority
#
#def_key "q"
#  quit
#
