# http://elm-lang.org # ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ # Detection # ‾‾‾‾‾‾‾‾‾ hook global BufCreate .*[.](elm) %{ set buffer filetype elm } # Highlighters # ‾‾‾‾‾‾‾‾‾‾‾‾ add-highlighter -group / regions -default code elm \ string '"' (? s \h+$ d } } def -hidden elm-indent-after " exec -draft \\; k x ^\\h*(if)|(case\\h+[\\w']+\\h+of|let|in|\\{\\h+\\w+|\\w+\\h+->|[=(])$ j " def -hidden elm-indent-on-new-line %{ eval -draft -itersel %{ # copy -- comments prefix and following white spaces try %{ exec -draft k s ^\h*\K--\h* y gh j P } # preserve previous line indent try %{ exec -draft \; K } # align to first clause try %{ exec -draft \; k x X s ^\h*(if|then|else)?\h*(([\w']+\h+)+=)?\h*(case\h+[\w']+\h+of|let)\h+\K.* s \A|.\z & } # filter previous line try %{ exec -draft k : elm-filter-around-selections } # indent after lines beginning with condition or ending with expression or =( try %{ elm-indent-after } } } # Initialization # ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ hook -group elm-highlight global WinSetOption filetype=elm %{ add-highlighter ref elm } hook global WinSetOption filetype=elm %{ hook window InsertEnd .* -group elm-hooks elm-filter-around-selections hook window InsertChar \n -group elm-indent elm-indent-on-new-line } hook -group elm-highlight global WinSetOption filetype=(?!elm).* %{ remove-highlighter elm } hook global WinSetOption filetype=(?!elm).* %{ remove-hooks window elm-indent remove-hooks window elm-hooks }