diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2014-07-08 00:18:35 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2014-07-08 00:18:35 +0100 |
| commit | 4e4680c9c6b08d2fa63fd40e2b0ef99b1f259b2f (patch) | |
| tree | 7f7c99c3d24cbc93da281f0237e5cb0ebe6a5b6e | |
| parent | 0341aa2cbc2c37edf9a84d92b0ac0589e67e5467 (diff) | |
| parent | 0b16ca3e5e4a932397adc48eea16d5c19ef9ff8d (diff) | |
Merge remote-tracking branch 'alexherbo2/json-rc'
| -rw-r--r-- | rc/json.kak | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/rc/json.kak b/rc/json.kak new file mode 100644 index 00000000..6c8bbe19 --- /dev/null +++ b/rc/json.kak @@ -0,0 +1,69 @@ +# http://json.org +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +# Detection +# ‾‾‾‾‾‾‾‾‾ + +hook global BufSetOption mimetype=text/x-json %{ + set buffer filetype json +} + +hook global BufCreate .*[.](json) %{ + set buffer filetype json +} + +# Highlighters +# ‾‾‾‾‾‾‾‾‾‾‾‾ + +addhl -group / multi_region -default code json \ + string '"' (?<!\\)(\\\\)*" '' + +addhl -group /json/string fill string + +addhl -group /json/code regex \<(true|false|null)\> 0:value + +# Commands +# ‾‾‾‾‾‾‾‾ + +def -hidden _json_filter_around_selections %{ + eval -draft -itersel %{ + exec <a-x> + # remove trailing white spaces + try %{ exec -draft s \h+$ <ret> d } + } +} + +def -hidden _json_indent_on_char " + eval -draft -itersel ' + # indent closer token to its opener + try %_ exec -draft gh <a-k> ^\h*[]}] <ret> m <a-&> _ + ' +" + +def -hidden _json_indent_on_new_line " + eval -draft -itersel ' + # preserve previous line indent + try %{ exec -draft <space> K <a-&> } + # filter previous line + try %{ exec -draft k : _json_filter_around_selections <ret> } + # indent after lines beginning with opener token + try %_ exec -draft k x <a-k> ^\h*[[{] <ret> j <a-gt> _ + ' +" + +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=json %{ + addhl ref json + + hook window InsertEnd .* -group json-hooks _json_filter_around_selections + hook window InsertChar .* -group json-indent _json_indent_on_char + hook window InsertChar \n -group json-indent _json_indent_on_new_line +} + +hook global WinSetOption filetype=(?!json).* %{ + rmhl json + rmhooks window json-indent + rmhooks window json-hooks +} |
