diff options
| author | Alex Leferry 2 <alexherbo2@gmail.com> | 2014-07-05 14:32:37 +0200 |
|---|---|---|
| committer | Alex Leferry 2 <alexherbo2@gmail.com> | 2014-07-07 16:24:14 +0100 |
| commit | 0b16ca3e5e4a932397adc48eea16d5c19ef9ff8d (patch) | |
| tree | 37c052ca78137fa3e3ae955a25d957ccb75fd5ac | |
| parent | f69df6560dfeea4c3671910851c72146f6f68e0d (diff) | |
add rc/json.kak
| -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 +} |
