diff --git a/rc/extra/pony.kak b/rc/extra/pony.kak new file mode 100644 index 00000000..2c863a7a --- /dev/null +++ b/rc/extra/pony.kak @@ -0,0 +1,113 @@ +# http://ponylang.org +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +# Detection +# ‾‾‾‾‾‾‾‾‾ + +hook global BufCreate .*[.](pony) %{ + set buffer filetype pony +} + +hook global BufOpen .*[.](pony) %{ + set buffer filetype pony + echo -debug "BufOpen" +} + +hook global BufNew .*[.](pony) %{ + set buffer filetype pony +} + +# Highlighters & Completion +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +addhl -group / regions -default code pony \ + double_string '"""' '"""' '' \ + double_string '"' (?' 0:type + addhl -group /pony/code regex '\b(${keywords})\b' 0:keyword + addhl -group /pony/code regex ';' 0:keyword + addhl -group /pony/code regex '^\s*|' 0:keyword + addhl -group /pony/code regex '\b(${type_decl})\b' 0:identifier + addhl -group /pony/code regex '\b(${struct})\b' 0:identifier + addhl -group /pony/code regex '\b(${capabilities})\b(!|^)?' 1:builtin 2:builtin + " + + # Highlight types and attributes + printf %s " + addhl -group /pony/code regex '@[\w_]+\b' 0:attribute + " +} + +# Commands +# ‾‾‾‾‾‾‾‾ + +def -hidden pony-indent-on-new-line %{ + eval -draft -itersel %{ + # preserve previous line indent + try %{ exec -draft K } + # cleanup trailing whitespaces from previous line + try %{ exec -draft k s \h+$ d } + # copy '//' comment prefix and following white spaces + # try %{ exec -draft k x s ^\h*//\h* y jgh P } + # indent after line ending with : + try %{ exec -draft k x (do|try|then|else|=>)$ j } + # else, end are always de-indented + try %{ exec -draft k x (else|end):$ k x s ^\h* y j x ^" J } + } +} + +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook -group pony-highlight global WinSetOption filetype=pony %{ addhl ref pony } + +hook global WinSetOption filetype=pony %{ + hook window InsertChar \n -group pony-indent pony-indent-on-new-line + # cleanup trailing whitespaces on current line insert end + hook window InsertEnd .* -group pony-indent %{ try %{ exec -draft \; s ^\h+$ d } } +} + +hook global WinSetOption filetype=pony %{ + set buffer tabstop 2 + set buffer indentwidth 2 +} + +hook -group pony-highlight global WinSetOption filetype=(?!pony).* %{ rmhl pony } + +hook global WinSetOption filetype=(?!pony).* %{ + rmhooks window pony-indent +}