diff --git a/.config/kak/autoload/filetype/kdl.kak b/.config/kak/autoload/filetype/kdl.kak index 140df29d..8bd728ae 100644 --- a/.config/kak/autoload/filetype/kdl.kak +++ b/.config/kak/autoload/filetype/kdl.kak @@ -1,24 +1,47 @@ hook global BufCreate .*[.](kdl) %{ - set-option buffer filetype kdl - set-option buffer comment_line "//" - set-option buffer comment_block_begin "/*" - set-option buffer comment_block_end "*/" - set-option window formatcmd "kdlfmt format -" + set-option buffer filetype kdl + set-option buffer comment_line "//" + set-option buffer comment_block_begin "/*" + set-option buffer comment_block_end "*/" + set-option window formatcmd "kdlfmt format -" } hook global WinSetOption filetype=kdl %{ - require-module kdl + require-module kdl - hook window InsertChar \n -group kdl-indent %{ kdl-indent-newline } - hook window InsertChar \} -group kdl-indent %{ kdl-indent-closing-brace } + hook window InsertChar \n -group kdl-indent %{ kdl-indent-newline } + hook window InsertChar \} -group kdl-indent %{ kdl-indent-closing-brace } - hook -once -always window WinSetOption filetype=.* %{ remove-hooks window kdl-indent } + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window kdl-indent } - hook -group kdl-auto-format window BufWritePre .* format - hook -once -always WinSetOption filetype=.* %sh{ - if [ "$kak_opt_filetype" != "kdl" ]; then - echo "unset-option window formatcmd" - echo "remove-hooks window kdl-auto-format" - fi - } + hook -group kdl-auto-format window BufWritePre .* format + hook -once -always WinSetOption filetype=.* %sh{ + if [ "$kak_opt_filetype" != "kdl" ]; then + echo "unset-option window formatcmd" + echo "remove-hooks window kdl-auto-format" + fi + } } + +provide-module kdl %~ + +define-command -hidden kdl-indent-newline %( + evaluate-commands -no-hooks -draft -itersel %( + # preserve prev line indent + try %{ execute-keys -draft K } + # rem trailing whitespace on prev line + try %( execute-keys -draft kx \{$ j ) + + # deindent if next line start with { + try %( execute-keys -draft x ^\h*\} gh / \} m 1 ) + ) +) + +define-command -hidden kdl-indent-closing-brace %( + evaluate-commands -no-hooks -draft -itersel %( + #align closing brace to block start + try %( execute_keys -draft x_ ^\h*\}\z m1 ) + ) +) + +~