# ncmpcpp bindings
# modified from source /usr/share/doc/ncmpcpp/bindings.gz

##### 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 "["
    scroll_up_album

def_key "]"
    scroll_down_album

def_key "{"
    scroll_up_artist

def_key "}"
    scroll_down_artist

def_key "j"
    scroll_down
def_key "k"
    scroll_up

def_key "ctrl-u"
    page_up

def_key "ctrl-d"
    page_down

def_key "g"
    move_home

def_key "G"
    move_end

def_key "l"
    next_column

def_key "h"
    previous_column

def_key "r"
    toggle_repeat

def_key "z"
    toggle_random

def_key "ctrl-s"
    save_tag_changes

def_key "S"
    toggle_single

def_key "C"
    toggle_consume

def_key "R"
    toggle_replay_gain_mode

def_key "#"
    toggle_bitrate_visibility

def_key "Z"
    shuffle

def_key "x"
    toggle_crossfade

def_key "X"
    set_crossfade

def_key "ctrl-f"
    apply_filter

def_key "/"
    find

def_key "/"
    find_item_forward

def_key "n"
    next_found_item

def_key "N"
    previous_found_item

def_key "e"
    edit_song

def_key "e"
    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 "?"
    show_song_info

def_key "?"
    show_artist_info
