mirror of
https://github.com/mawww/kakoune.git
synced 2024-12-12 00:52:14 +03:00
65 lines
1.9 KiB
Plaintext
65 lines
1.9 KiB
Plaintext
# http://common-lisp.net
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
# Detection
|
|
# ‾‾‾‾‾‾‾‾‾
|
|
|
|
hook global BufSetOption mimetype=text/x-lisp %{
|
|
set buffer filetype lisp
|
|
}
|
|
|
|
hook global BufCreate .*[.](lisp) %{
|
|
set buffer filetype lisp
|
|
}
|
|
|
|
# Highlighters
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
addhl -group / regions -default code lisp \
|
|
string '"' (?<!\\)(\\\\)*" '' \
|
|
comment ';' '$' ''
|
|
|
|
addhl -group /lisp/string fill string
|
|
addhl -group /lisp/comment fill comment
|
|
|
|
addhl -group /lisp/code regex \<(nil|true|false)\> 0:value
|
|
addhl -group /lisp/code regex (((\Q***\E)|(///)|(\Q+++\E)){1,3})|(1[+-])|(<|>|<=|=|>=|) 0:operator
|
|
addhl -group /lisp/code regex \<(([':]\w+)|([*]\H+[*]))\> 0:identifier
|
|
addhl -group /lisp/code regex \<(def[a-z]+|if|do|let|lambda|catch|and|assert|while|def|do|fn|finally|let|loop|new|quote|recur|set!|throw|try|var|case|if-let|if-not|when|when-first|when-let|when-not|(cond(->|->>)?))\> 0:keyword
|
|
|
|
# Commands
|
|
# ‾‾‾‾‾‾‾‾
|
|
|
|
def -hidden _lisp_filter_around_selections %{
|
|
eval -draft -itersel %{
|
|
exec <a-x>
|
|
# remove trailing white spaces
|
|
try %{ exec -draft s \h+$ <ret> d }
|
|
}
|
|
}
|
|
|
|
def -hidden _lisp_indent_on_new_line %{
|
|
eval -draft -itersel %{
|
|
# preserve previous line indent
|
|
try %{ exec -draft <space> K <a-&> }
|
|
# indent when matches opening paren
|
|
try %{ exec -draft [( <a-k> \`\([^\n]+\n[^\n]*\n?\' <ret> <a-\;> \; <a-gt> }
|
|
}
|
|
}
|
|
|
|
# Initialization
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
hook global WinSetOption filetype=lisp %{
|
|
addhl ref lisp
|
|
|
|
hook window InsertEnd .* -group lisp-hooks _lisp_filter_around_selections
|
|
hook window InsertChar \n -group lisp-indent _lisp_indent_on_new_line
|
|
}
|
|
|
|
hook global WinSetOption filetype=(?!lisp).* %{
|
|
rmhl lisp
|
|
rmhooks window lisp-indent
|
|
rmhooks window lisp-hooks
|
|
}
|