Merge remote-tracking branch 'eraserhd/lisp-indent'

This commit is contained in:
Maxime Coste 2018-10-01 11:11:11 +10:00
commit 2e0b58a43f
2 changed files with 45 additions and 6 deletions

View File

@ -158,7 +158,32 @@ evaluate-commands %sh{
# ‾‾‾‾‾‾‾‾
define-command -hidden clojure-filter-around-selections lisp-filter-around-selections
define-command -hidden clojure-indent-on-new-line lisp-indent-on-new-line
declare-option \
-docstring 'regex matching the head of forms which have options *and* indented bodies' \
regex clojure_special_indent_forms \
'(?:def.*|doseq|for|fn\*?|if(-.*|)|let.*|loop|ns|testing|with-.*|when(-.*|))'
define-command -hidden clojure-indent-on-new-line %{
# registers: i = best align point so far; w = start of first word of form
evaluate-commands -draft -save-regs '/"|^@iw' -itersel %{
execute-keys -draft 'gk"iZ'
try %{
execute-keys -draft '[bl"i<a-Z><gt>"wZ'
try %{
# If a special form, indent another space
execute-keys -draft '"wze<a-k>\A' %opt{clojure_special_indent_forms} '\z<ret><a-L>s.\K.*<ret><a-;>;"i<a-Z><gt>'
} catch %{
# If not special and parameter appears on line 1, indent to parameter
execute-keys -draft '"wze<a-l>s\h\K[^\s].*<ret><a-;>;"i<a-Z><gt>'
}
}
try %{ execute-keys -draft '[rl"i<a-Z><gt>' }
try %{ execute-keys -draft '[Bl"i<a-Z><gt>' }
execute-keys -draft '"i<a-z>a&<space>'
}
}
# Initialization
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾

View File

@ -31,12 +31,26 @@ define-command -hidden lisp-filter-around-selections %{
try %{ execute-keys -draft -itersel <a-x> s \h+$ <ret> d }
}
declare-option \
-docstring 'regex matching the head of forms which have options *and* indented bodies' \
regex lisp_special_indent_forms \
'(?:def.*|if(-.*|)|let.*|lambda|with-.*|when(-.*|))'
define-command -hidden lisp-indent-on-new-line %{
evaluate-commands -draft -itersel %{
# preserve previous line indent
try %{ execute-keys -draft \; K <a-&> }
# indent when matches opening paren
try %{ execute-keys -draft [( <a-k> \A\([^\n]+\n[^\n]*\n?\z <ret> <a-\;> \; <a-gt> }
# registers: i = best align point so far; w = start of first word of form
evaluate-commands -draft -save-regs '/"|^@iw' -itersel %{
execute-keys -draft 'gk"iZ'
try %{
execute-keys -draft '[bl"i<a-Z><gt>"wZ'
try %{ execute-keys -draft '"wz<a-l>s.\K.*<ret><a-;>;"i<a-Z><gt>' }
# If not "special" form and parameter appears on line 1, indent to parameter
execute-keys -draft '"wze<a-K>\A' %opt{lisp_special_indent_forms} '\z<ret>' '<a-l>s\h\K[^\s].*<ret><a-;>;"i<a-Z><gt>'
}
try %{ execute-keys -draft '[rl"i<a-Z><gt>' }
try %{ execute-keys -draft '[Bl"i<a-Z><gt>' }
execute-keys -draft '"i<a-z>a&<space>'
}
}