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 '"' (? 0:value + +# Commands +# ‾‾‾‾‾‾‾‾ + +def -hidden _json_filter_around_selections %{ + eval -draft -itersel %{ + exec + # remove trailing white spaces + try %{ exec -draft s \h+$ d } + } +} + +def -hidden _json_indent_on_char " + eval -draft -itersel ' + # indent closer token to its opener + try %_ exec -draft gh ^\h*[]}] m _ + ' +" + +def -hidden _json_indent_on_new_line " + eval -draft -itersel ' + # preserve previous line indent + try %{ exec -draft K } + # filter previous line + try %{ exec -draft k : _json_filter_around_selections } + # indent after lines beginning with opener token + try %_ exec -draft k x ^\h*[[{] j _ + ' +" + +# 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 +}