Seq++ has a lot of keyboard commands for editing

Recently people were talking about sequencers that can use the computer keyboard for editing. The good news / bad news with our Seq++ had always been that the mouse editing is fairly weak, whereas the keyboard editing is very powerful. Which gets to the feature we never really talked about much, the ability for the user to remap the keyboard to bind any function to any key. So, below is the standard mapping that comes with the sequencer. The intention here is to show what it would look like to change this, and of course to show all the different editing operations that are available from the keyboard.

    "bindings": [
    {"key": "f1", "action": "help"},
    {"key": "n", "action": "change.track.length"},
    {"key": "l", "action": "loop"},

    {"key": "insert", "action": "insert.default", "comment": "**** all the note insert"},
    {"key": "numpad0", "action": "insert.default"},
    {"key": "enter", "action": "insert.default"},

    {"key": "w", "action": "insert.whole.advance"},
    {"key": "h", "action": "insert.half.advance"},
    {"key": "q", "action": "insert.quarter.advance"},
    {"key": "e", "action": "insert.eighth.advance"},
    {"key": "x", "action": "insert.sixteenth.advance"},

    {"key": "w+shift", "action": "insert.whole"},
    {"key": "h+shift", "action": "insert.half"},
    {"key": "q+shift", "action": "insert.quarter"},
    {"key": "e+shift", "action": "insert.eighth"},
    {"key": "x+shift", "action": "insert.sixteenth"},

    {"key": "*", "action": "grab.default.note"},
    {"key": "shift+8", "action": "grab.default.note"},
    {"key": "delete", "action": "delete.note"},
    {"key": "backspace", "action": "delete.note"},
    {"key": "numpad_decimal", "action": "delete.note"},

    {"key": "left", "action": "move.left.normal", "comment": "**** all the cursor movement"},
    {"key": "4", "action": "move.left.normal"},
    {"key": "numpad4", "action": "move.left.normal"},

    {"key": "home", "action": "move.left.all"},
    {"key": "home+ctrl", "action": "move.left.measure"},
    {"key": "end", "action": "move.right.all"},
    {"key": "end+ctrl", "action": "move.right.measure"},

    {"key": "right", "action": "move.right.normal"},
    {"key": "6", "action": "move.right.normal"},
    {"key": "numpad6", "action": "move.right.normal"},

    {"key": "up", "action": "move.up.normal"},
    {"key": "5", "action": "move.up.normal"},
    {"key": "numpad8", "action": "move.up.normal"},

    {"key": "down", "action": "move.down.normal"},
    {"key": "r", "action": "move.down.normal"},
    {"key": "numpad2", "action": "move.down.normal"},

    {"key": "pageup", "action": "move.up.octave"},
    {"key": "pagedown", "action": "move.down.octave"},

    {"key": "tab", "action":"", "comment": "**** all next/prev note selection"},
    {"key": "tab+shift", "action":""},
    {"key": "tab+ctrl", "action":"select.previous"},
    {"key": "tab+ctrl+shift", "action":"select.previous.extend"},
    {"key": "a+ctrl", "action": "select.all"},

    {"key": "numpad_add", "action": "value.increment.normal", "comment": "edit commands"},
    {"key": "=+shift", "action": "value.increment.normal"},
    {"key": "numpad_subtract", "action": "value.decrement.normal"},
    {"key": "-", "action": "value.decrement.normal"},
    {"key": "[", "action": "value.decrement.large"},
    {"key": "]", "action": "value.increment.large"},
    {"key": ",", "action": "value.decrement.small"},
    {"key": ".", "action": "value.increment.small"},

    {"key": "x+ctrl", "action": "cut"},
    {"key": "c+ctrl", "action": "copy"},
    {"key": "v+ctrl", "action": "paste"},

    {"key": "s", "action":"edit.start.time"},
    {"key": "d", "action":"edit.duration"},
    {"key": "p", "action":"edit.pitch"}
    "ignore_case": ["up", "down", "left", "right"]

(Astute JSON folks will notice that we made a dummy tag called “comment”. We ignore it on parsing, but this lets us make legal JSON that has comments in it).