From 6c45b1d1e2859e3a0ac5eefc8b611bfc78c09655 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Mon, 1 Dec 2014 13:52:24 +0000 Subject: [PATCH] Try to unify objective c and cpp in a c-family.kak file --- rc/{cpp.kak => c-family.kak} | 81 ++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 31 deletions(-) rename rc/{cpp.kak => c-family.kak} (58%) diff --git a/rc/cpp.kak b/rc/c-family.kak similarity index 58% rename from rc/cpp.kak rename to rc/c-family.kak index be6c807c..7b2b2ecb 100644 --- a/rc/cpp.kak +++ b/rc/c-family.kak @@ -6,7 +6,11 @@ hook global BufSetOption mimetype=text/x-c(\+\+)? %{ set buffer filetype cpp } -def -hidden _cpp_indent_on_new_line %~ +hook global BufCreate .*\.m %{ + set buffer filetype objc +} + +def -hidden _c-family-indent-on-new-line %~ eval -draft -itersel %_ # preserve previous line indent try %{ exec -draft \;K } @@ -27,71 +31,86 @@ def -hidden _cpp_indent_on_new_line %~ _ ~ -def -hidden _cpp_indent_on_opening_curly_brace %[ +def -hidden _c-family-indent-on-opening-curly-brace %[ # align indent with opening paren when { is entered on a new line after the closing paren try %[ exec -draft -itersel h)M \`\(.*\)\h*\n\h*\{\' s \`|.\' 1 ] ] -def -hidden _cpp_indent_on_closing_curly_brace %[ +def -hidden _c-family-indent-on-closing-curly-brace %[ # align to opening curly brace when alone on a line try %[ exec -itersel -draft ^\h+\}$hms\`|.\'1 ] # add ; after } if class or struct definition try %[ exec -draft "hm;(class|struct|union)\`(class|struct|union)[^{}\n]+(\n)?\s*\{\'ma;" ] ] -addhl -group / regions -default code cpp \ - string %{(?|\<-?\d+[fdiu]?|'((\\.)?|[^'\\])'} 0:value addhl -group /cpp/code regex "\<(void|int|char|unsigned|float|bool|size_t)\>" 0:type addhl -group /cpp/code regex "\<(while|for|if|else|do|switch|case|default|goto|break|continue|return|using|try|catch|throw|new|delete|and|or|not|operator|explicit|(?:reinterpret|const|static|dynamic)_cast)\>" 0:keyword addhl -group /cpp/code regex "\<(const|constexpr|mutable|auto|namespace|inline|static|volatile|class|struct|enum|union|public|protected|private|template|typedef|virtual|friend|extern|typename|override|final)\>" 0:attribute -hook global WinSetOption filetype=cpp %[ - addhl ref cpp +# objective-c specific +addhl -group /objc/code regex %{\<(self|nil|id|super|TRUE|FALSE|YES|NO|NULL)\>|\<-?\d+[fdiu]?|'((\\.)?|[^'\\])'} 0:value +addhl -group /objc/code regex "\<(void|int|char|unsigned|float|bool|size_t|instancetype|BOOL|NSInteger|NSUInteger|CGFloat|NSString)\>" 0:type +addhl -group /objc/code regex "\<(while|for|if|else|do|switch|case|default|goto|break|continue|return)\>" 0:keyword +addhl -group /objc/code regex "\<(const|auto|inline|static|volatile|struct|enum|union|typedef|extern|__block|@\w+)\>" 0:attribute +hook global WinSetOption filetype=(cpp|objc) %[ # cleanup trailing whitespaces when exiting insert mode - hook window InsertEnd .* -group cpp-hooks %{ try %{ exec -draft s\h+$d } } + hook window InsertEnd .* -group c-family-hooks %{ try %{ exec -draft s\h+$d } } - hook window InsertChar \n -group cpp-indent _cpp_indent_on_new_line - hook window InsertChar \{ -group cpp-indent _cpp_indent_on_opening_curly_brace - hook window InsertChar \} -group cpp-indent _cpp_indent_on_closing_curly_brace + hook window InsertChar \n -group c-family-indent _c-family-indent-on-new-line + hook window InsertChar \{ -group c-family-indent _c-family-indent-on-opening-curly-brace + hook window InsertChar \} -group c-family-indent _c-family-indent-on-closing-curly-brace - alias window alt cpp-alternative-file + alias window alt c-family-alternative-file ] -hook global WinSetOption filetype=(?!cpp).* %{ - rmhl cpp - rmhooks window cpp-indent - rmhooks window cpp-hooks +hook global WinSetOption filetype=(?!cpp|objc).* %[ + rmhooks window c-family-indent + rmhooks window c-family-hooks + unalias window alt c-family-alternative-file +] - unalias window alt cpp-alternative-file -} +hook global WinSetOption filetype=cpp %[ addhl ref cpp ] +hook global WinSetOption filetype=(?!cpp).* %[ rmhl cpp ] -def -hidden _cpp_insert_include_guards %{ +hook global WinSetOption filetype=objc %[ addhl ref objc ] +hook global WinSetOption filetype=(?!objc).* %[ rmhl objc ] + +def -hidden _c-family-insert-include-guards %{ exec ggi%ggxs\.c_A_INCLUDEDggxyppI#ifndefjI#definejI#endif//O } -hook global BufNew .*\.(h|hh|hpp|hxx|H) _cpp_insert_include_guards +hook global BufNew .*\.(h|hh|hpp|hxx|H) _c-family-insert-include-guards decl str-list alt_dirs ".;.." -def cpp-alternative-file -docstring "Jump to the alternate file (header/implementation)" %{ %sh{ +def c-family-alternative-file -docstring "Jump to the alternate file (header/implementation)" %{ %sh{ alt_dirs=$(echo ${kak_opt_alt_dirs} | sed -e 's/;/ /g') file=$(basename ${kak_buffile}) dir=$(dirname ${kak_buffile}) case ${file} in - *.c|*.cc|*.cpp|*.cxx|*.C|*.inl) + *.c|*.cc|*.cpp|*.cxx|*.C|*.inl|*.m) for alt_dir in ${alt_dirs}; do for ext in h hh hpp hxx H; do altname="${dir}/${alt_dir}/${file%.*}.${ext}" @@ -102,7 +121,7 @@ def cpp-alternative-file -docstring "Jump to the alternate file (header/implemen ;; *.h|*.hh|*.hpp|*.hxx|*.H) for alt_dir in ${alt_dirs}; do - for ext in c cc cpp cxx C; do + for ext in c cc cpp cxx C m; do altname="${dir}/${alt_dir}/${file%.*}.${ext}" [ -f ${altname} ] && break done