summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlePerdu <zdpeltzer@gmail.com>2019-05-31 11:27:36 -0400
committerlePerdu <zdpeltzer@gmail.com>2019-05-31 11:44:15 -0400
commitdbe32d314fb5a8eaba1c37a3a5d544e644f4c3db (patch)
treec67a4cadcaaa3fbfe4d4ce92b22e5a5eb343f1ed
parent1ebea85e6f07aeb6a8287b8043480f56f0e58edb (diff)
Add auto-indent scripts for LaTeX
-rw-r--r--rc/filetype/latex.kak54
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-&>
+ )
+ )
+)
+
+~