c-family.kak: add plain c highlighter and detection

Give priority to extension over detected mimetype, as
file often takes c++ files to be c files.
This commit is contained in:
Maxime Coste 2015-09-21 23:36:20 +01:00
parent 8529720aef
commit 70fdd068dc

View File

@ -1,13 +1,24 @@
hook global BufCreate .*\.(c|cc|cpp|cxx|C|h|hh|hpp|hxx|H) %{
hook global BufCreate .*\.(cc|cpp|cxx|C|hh|hpp|hxx|H)$ %{
set buffer filetype cpp
set buffer mimetype ''
}
hook global BufSetOption mimetype=text/x-c(\+\+)? %{
hook global BufCreate .*\.(c|h)$ %{
set buffer filetype c
set buffer mimetype ''
}
hook global BufSetOption mimetype=text/x-c %{
set buffer filetype c
}
hook global BufSetOption mimetype=text/x-c\+\+ %{
set buffer filetype cpp
}
hook global BufCreate .*\.m %{
set buffer filetype objc
set buffer mimetype ''
}
hook global BufSetOption mimetype=text/x-objc %{
@ -49,7 +60,7 @@ def -hidden _c-family-indent-on-closing-curly-brace %[
# Regions definition are the same between c++ and objective-c
%sh{
for ft in cpp objc; do
for ft in c cpp objc; do
if [ "${ft}" = "objc" ]; then
maybe_at='@?'
else
@ -71,6 +82,12 @@ def -hidden _c-family-indent-on-closing-curly-brace %[
done
}
# c specific
addhl -group /c/code regex %{\<NULL\>|\<-?(0x[0-9a-fA-F]+|\d+)[fdiu]?|'((\\.)?|[^'\\])'} 0:value
addhl -group /c/code regex "\<(void|int|char|unsigned|float|double|size_t)\>" 0:type
addhl -group /c/code regex "\<(while|for|if|else|do|switch|case|default|goto|break|continue|return|sizeof)\>" 0:keyword
addhl -group /c/code regex "\<(const|inline|static|volatile|struct|enum|union|typedef|extern)\>" 0:attribute
# c++ specific
addhl -group /cpp/code regex %{\<(this|true|false|NULL|nullptr|)\>|\<-?(0x[0-9a-fA-F]+|\d+)[fdiu]?|'((\\.)?|[^'\\])'} 0:value
addhl -group /cpp/code regex "\<(void|int|char|unsigned|float|double|bool|size_t)\>" 0:type
@ -85,7 +102,7 @@ addhl -group /objc/code regex "\<(const|auto|inline|static|volatile|struct|enum|
addhl -group /objc/code regex "@(property|synthesize|interface|implementation|protocol|end|selector|autoreleasepool|try|catch|class|synchronized)\>" 0:attribute
addhl -group /objc/code regex "\<(IBAction|IBOutlet)\>" 0:attribute
hook global WinSetOption filetype=(cpp|objc) %[
hook global WinSetOption filetype=(c|cpp|objc) %[
# cleanup trailing whitespaces when exiting insert mode
hook window InsertEnd .* -group c-family-hooks %{ try %{ exec -draft <a-x>s^\h+$<ret>d } }
@ -97,18 +114,21 @@ hook global WinSetOption filetype=(cpp|objc) %[
alias window comment-selection c-family-comment-selection
]
hook global WinSetOption filetype=(?!cpp|objc).* %[
hook global WinSetOption filetype=(?!(c|cpp|objc)$).* %[
rmhooks window c-family-indent
rmhooks window c-family-hooks
unalias window alt c-family-alternative-file
unalias window comment-selection c-family-comment-selection
]
hook global WinSetOption filetype=c %[ addhl ref c ]
hook global WinSetOption filetype=(?!c$).* %[ rmhl c ]
hook global WinSetOption filetype=cpp %[ addhl ref cpp ]
hook global WinSetOption filetype=(?!cpp).* %[ rmhl cpp ]
hook global WinSetOption filetype=(?!cpp$).* %[ rmhl cpp ]
hook global WinSetOption filetype=objc %[ addhl ref objc ]
hook global WinSetOption filetype=(?!objc).* %[ rmhl objc ]
hook global WinSetOption filetype=(?!objc$).* %[ rmhl objc ]
def -hidden _c-family-insert-include-guards %{
exec ggi<c-r>%<ret><esc>ggxs\.<ret>c_<esc><space>A_INCLUDED<esc>ggxyppI#ifndef<space><esc>jI#define<space><esc>jI#endif<space>//<space><esc>O<esc>