diff options
| author | lePerdu <zdpeltzer@gmail.com> | 2019-05-31 11:27:36 -0400 |
|---|---|---|
| committer | lePerdu <zdpeltzer@gmail.com> | 2019-05-31 11:44:15 -0400 |
| commit | dbe32d314fb5a8eaba1c37a3a5d544e644f4c3db (patch) | |
| tree | c67a4cadcaaa3fbfe4d4ce92b22e5a5eb343f1ed /rc/filetype/latex.kak | |
| parent | 1ebea85e6f07aeb6a8287b8043480f56f0e58edb (diff) | |
Add auto-indent scripts for LaTeX
Diffstat (limited to 'rc/filetype/latex.kak')
| -rw-r--r-- | rc/filetype/latex.kak | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/rc/filetype/latex.kak b/rc/filetype/latex.kak index ebdeb97c..5ed0866b 100644 --- a/rc/filetype/latex.kak +++ b/rc/filetype/latex.kak @@ -11,16 +11,21 @@ hook global BufCreate .*\.tex %{ # Initialization # ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -hook global WinSetOption filetype=latex %{ +hook global WinSetOption filetype=latex %( require-module latex -} + + hook window InsertChar \n -group latex-indent %{ latex-indent-newline } + hook window InsertChar \} -group latex-indent %{ latex-indent-closing-brace } + hook window ModeChange insert:.* -group latex-indent %{ latex-trim-indent } + hook -once -always window WinSetOption filetype=.* %{ remove-hooks latex-indent } +) hook -group latex-highlight global WinSetOption filetype=latex %{ add-highlighter window/latex ref latex hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/latex } } -provide-module latex %( +provide-module latex %~ # Highlighters # ‾‾‾‾‾‾‾‾‾‾‾‾ @@ -40,4 +45,47 @@ add-highlighter shared/latex/content/ regex '\\(emph|textit)\{([^}]+)\}' 2:defau # Bold text add-highlighter shared/latex/content/ regex '\\textbf\{([^}]+)\}' 1:default+b + +# Indent +# ------ + +define-command -hidden latex-trim-indent %{ + evaluate-commands -no-hooks -draft -itersel %{ + try %{ execute-keys <a-x> 1s^(\h+)$<ret> d } + } +} + +define-command -hidden latex-indent-newline %( + evaluate-commands -no-hooks -draft -itersel %( + # copy '%' comment prefix and following white spaces + try %{ execute-keys -draft k<a-x> s^\h*%\h*<ret> y jgh P } + # preserve previous line indent + try %{ execute-keys -draft K<a-&> } + # cleanup trailing whitespaces from previous line + try %{ execute-keys -draft k<a-x> s\h+$<ret> d } + # indent after line ending with { + try %( execute-keys -draft k<a-x> <a-k>\{$<ret> j<a-gt> ) + # indent after line ending with \begin{...}[...]{...}, with multiple + # sets of arguments possible + try %( + execute-keys -draft \ + k<a-x> \ + <a-k>\\begin\h*\{[^\}]+\}(\h|\[.*\]|\{.*\})*$<ret> \ + j<a-gt> + ) + ) ) + +define-command -hidden latex-indent-closing-brace %( + evaluate-commands -no-hooks -draft -itersel %( + # Align lone } with matching bracket + try %( execute-keys -draft <a-x>_ <a-k>\A\}\z<ret> m<a-S>1<a-&> ) + # Align \end{...} with corresponding \begin{...} + try %( + execute-keys -draft h<a-h> 1s\\end\h*\{([^\}]+)\}\z<ret> \ + <a-?>\\begin\s*\{<c-r>.\}<ret> <a-S>1<a-&> + ) + ) +) + +~ |
