diff --git a/rc/base/lua.kak b/rc/base/lua.kak index 609f5036..b23c92e3 100644 --- a/rc/base/lua.kak +++ b/rc/base/lua.kak @@ -9,7 +9,7 @@ hook global BufSetOption mimetype=text/x-lua %{ } hook global BufCreate .*[.](lua) %{ - set buffer mimetype text/x-lua + set buffer filetype lua } # Highlighters @@ -56,36 +56,39 @@ def lua-alternative-file -docstring 'Jump to the alternate file (implementation }} def -hidden _lua_filter_around_selections %{ - eval -draft -itersel %{ - exec + eval -no-hooks -draft -itersel %{ # remove trailing white spaces - try %{ exec -draft s \h + $ d } + try %{ exec -draft s\h+$d } } } def -hidden _lua_indent_on_char %{ - eval -draft -itersel %{ - # align end structure to start - try %{ exec -draft ^ \h * end $ ^ \h * (for|function|if|while) s \A | \Z \' } - # align _else_ statements to previous _if_ - try %{ exec -draft ^ \h * else (if) ? $ ^ \h * if s \A | \Z \' } + eval -no-hooks -draft -itersel %{ + # align middle and end structures to start and indent when necessary, elseif is already covered by else + try %{ exec -draft ^\h*(else)$^\h*(if)s\A|\Z' } + try %{ exec -draft ^\h*(end)$^\h*(for|function|if|while)s\A|\Z' } } } def -hidden _lua_indent_on_new_line %{ - eval -draft -itersel %{ + eval -no-hooks -draft -itersel %{ # preserve previous line indent - try %{ exec -draft K } + try %{ exec -draft K } # filter previous line - try %{ exec -draft k : _lua_filter_around_selections } - # copy -- comment prefix and following white spaces - try %{ exec -draft k x s ^ \h * \K -- \h * y j p } + try %{ exec -draft k:_lua_filter_around_selections } # indent after start structure - try %{ exec -draft k x ^ \h * (else|elseif|for|function|if|while) \b j } + try %{ exec -draft k^\h*(else|elseif|for|function|if|while)\bj } + } +} + +def -hidden _lua_insert_on_new_line %{ + eval -no-hooks -draft -itersel %{ + # copy -- comment prefix and following white spaces + try %{ exec -draft ks^\h*\K--\h*yjp } # wisely add end structure eval -save-regs x %{ - try %{ exec -draft k x s ^ \h + \" x y } catch %{ reg x '' } - try %{ exec -draft k x ^ x (for|function|if|while) j i X K ^ x (for|function|if|while) . * \n x end $ j x y p j a end } + try %{ exec -draft ks^\h+"xy } catch %{ reg x '' } + try %{ exec -draft k^x(for|function|if|while)jiXK^x(for|function|if|while).*\nx(else|end|elseif[^\n]*)$jxypjaend } } } } @@ -96,9 +99,9 @@ def -hidden _lua_indent_on_new_line %{ hook -group lua-highlight global WinSetOption filetype=lua %{ addhl ref lua } hook global WinSetOption filetype=lua %{ - hook window InsertEnd .* -group lua-hooks _lua_filter_around_selections hook window InsertChar .* -group lua-indent _lua_indent_on_char hook window InsertChar \n -group lua-indent _lua_indent_on_new_line + hook window InsertChar \n -group lua-insert _lua_insert_on_new_line alias window alt lua-alternative-file } @@ -107,7 +110,7 @@ hook -group lua-highlight global WinSetOption filetype=(?!lua).* %{ rmhl lua } hook global WinSetOption filetype=(?!lua).* %{ rmhooks window lua-indent - rmhooks window lua-hooks + rmhooks window lua-insert unalias window alt lua-alternative-file }