[
    // Main Hayaku context
    {
        "keys": ["tab"],
        "command": "hayaku",
        "context": [{"key": "hayaku_css_context"}]
    }

    // tab or enter at the end of a line should jump to a correct line
    , {
        "keys": ["tab"],
        "command": "hayaku_add_line",
        "context": [
            {"key": "hayaku_add_line"},
            {"key": "hayaku_at_css"},
            {"key": "hayaku_single_caret"}
        ]
    }
    , {
        "keys": ["enter"],
        "command": "hayaku_add_line",
        "context": [
            {"key": "hayaku_add_line"},
            {"key": "hayaku_at_css"},
            {"key": "hayaku_single_caret"}
        ]
    }

    // Temporary fix for the semicolon inserting (bad bad whitespace after)
    , { "keys": [":"], "command": "insert_snippet", "args": {"contents": ":$0"}, "context":
        [
            { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
            { "key": "hayaku_at_css" },
            { "key": "hayaku_single_caret" },
            { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\}|$)", "match_all": true }
        ]
    }

    // Temporary inline comment for CSS (would be replaced by a more useful command)
    , {
        "keys": ["/","/"],
        "command": "insert_snippet",
        "args": {"contents": "/* ${1} */$0"},
        "context": [
            { "key": "selector", "operator": "equal", "operand": "source.css -comment.block.css -punctuation.section.function.css -string.quoted", "match_all": true },
            { "key": "setting.hayaku_CSS_disable_inline_comment", "operator": "not_equal", "operand": true }
        ]
    }

    // Command for inserting CSS code block
    , {
        "keys":    ["ctrl+enter"],
        "command":  "hayaku_add_code_block",
        "context": [
            {"key": "hayaku_add_code_block"},
            {"key": "hayaku_at_css"},
            {"key": "hayaku_single_caret"}
        ]
    }

    // Command for inserting right indent for code block by enter in braces
    , {
        "keys":    ["enter"],
        "command":  "hayaku_expand_code_block",
        "context": [
            {"key": "hayaku_at_css"},
            {"key": "hayaku_single_caret"},
            {"key": "preceding_text", "operator": "regex_match", "operand": ".*\\{$" },
            {"key": "following_text", "operator": "regex_match", "operand": "^\\}" }
        ]
    },

    // Commands to jump out of multiple selections in CSS
    {
        "keys": ["up"],
        "command": "clear_fields",
        "context": [
            {"key": "has_next_field", "operator": "equal", "operand": true},
            {"key": "hayaku_at_css"},
            {"key": "hayaku_going_up"}
        ]
    },
    {
        "keys": ["down"],
        "command": "clear_fields",
        "context": [
            {"key": "has_next_field", "operator": "equal", "operand": true},
            {"key": "hayaku_at_css"},
            {"key": "hayaku_going_down"}
        ]
    }
]
