Sublime Forum

Plz make this key bindings default in new st4 version

#1

The enter could not insert new line with proper indentations in braces. Below code cost me 3 hours to fix the problems.

[
    // Auto-pair backtick, we really need it in JS.
  { "keys": ["`"], "command": "insert_snippet", "args": {"contents": "`$0`"}, "context":
    [
      { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
      { "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
      { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }
    ]
  },

  { "keys": ["`"], "command": "insert_snippet", "args": {"contents": "`${0:$SELECTION}`"}, "context":
    [
      { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
    ]
  },

  { "keys": ["`"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
    [
      { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
      { "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
      { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
    ]
  },

  { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
    [
      { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "preceding_text", "operator": "regex_contains", "operand": "`$", "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^`", "match_all": true },
      { "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
      { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
    ]
  },
  // end auto pair backtick

  // fix indent for () {} and []
  { "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/User/Add Line in Braces.sublime-macro"}, "context":
    [
      { "key": "selector", "operator": "equal", "operand": "source" },
      { "key": "setting.auto_indent", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "preceding_text", "operator": "regex_contains", "operand": "\\($", "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
    ]
  },

  { "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
    [
      { "key": "selector", "operator": "equal", "operand": "text" },
      { "key": "setting.auto_indent", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "preceding_text", "operator": "regex_contains", "operand": "\\($", "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^\\)", "match_all": true }
    ]
  },

  { "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/User/Add Line in Braces.sublime-macro"}, "context":
    [
      { "key": "selector", "operator": "equal", "operand": "source" },
      { "key": "setting.auto_indent", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
    ]
  },

  { "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
    [
      { "key": "selector", "operator": "equal", "operand": "text" },
      { "key": "setting.auto_indent", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
    ]
  },

  { "keys": ["enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line in Braces.sublime-macro"}, "context":
    [
      { "key": "setting.auto_indent", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "preceding_text", "operator": "regex_contains", "operand": "\\[$", "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true }
    ]
  },
]

and the macro file:

[
    {"command": "insert", "args": {"characters": "\n\n"} },
    {"command": "left_delete" },
    {"command": "move", "args": {"by": "lines", "forward": false} },
    {"command": "move_to", "args": {"to": "hardeol", "extend": false} },
    {"command": "reindent", "args": {"single_line": true} }

]

the micro code is from a SO answer.

I hope this is default, so any others won’t take their time to handle this.

0 Likes

#2

It’s not clear what problem this solves.

1 Like