diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2014-12-17 13:58:05 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2014-12-17 13:58:05 +0000 |
| commit | 8d7ddfdf8b5cebac0679ddf72017d667c6063eb5 (patch) | |
| tree | 3c515357f516530ee6f764111265c1187a2ddd98 | |
| parent | 5f3a477277828f3c698dd844c8df3614b55dd85b (diff) | |
Only remove trailing whitespaces on InsertEnd when last insert was auto indent
Fixes #242
| -rw-r--r-- | rc/c-family.kak | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/rc/c-family.kak b/rc/c-family.kak index a3106c8d..ff651b71 100644 --- a/rc/c-family.kak +++ b/rc/c-family.kak @@ -14,8 +14,10 @@ hook global BufSetOption mimetype=text/x-objc %{ set buffer filetype objc } +decl -hidden bool _c_family_last_change_was_indent false + def -hidden _c-family-indent-on-new-line %~ - eval -draft -itersel %_ + eval -draft -itersel %= # preserve previous line indent try %{ exec -draft \;K<a-&> } # indent after lines ending with { or ( @@ -32,7 +34,8 @@ def -hidden _c-family-indent-on-new-line %~ try %[ exec -draft k<a-x> <a-k> ^\h*(public|private|protected):\h*$ <ret> j<a-gt> ] # indent after if|else|while|for try %[ exec -draft \;<a-F>)MB <a-k> \`(if|else|while|for)\h*\(.*\)\h*\n\h*\n?\' <ret> s \`|.\' <ret> 1<a-&>1<a-space><a-gt> ] - _ + set buffer _c_family_last_change_was_indent true + = ~ def -hidden _c-family-indent-on-opening-curly-brace %[ @@ -86,8 +89,15 @@ addhl -group /objc/code regex "@(property|synthesize|interface|implementation|pr addhl -group /objc/code regex "\<(IBAction|IBOutlet)\>" 0:attribute hook global WinSetOption filetype=(cpp|objc) %[ + hook window BufInsert .* -group c-family-hooks %{ set buffer _c_family_last_change_was_indent false } + hook window BufErase .* -group c-family-hooks %{ set buffer _c_family_last_change_was_indent false } + # cleanup trailing whitespaces when exiting insert mode - hook window InsertEnd .* -group c-family-hooks %{ try %{ exec -draft <a-x>s\h+$<ret>d } } + hook window InsertEnd .* -group c-family-hooks %{ %sh{ + if [ $kak_opt__c_family_last_change_was_indent = "true" ]; then + echo 'try %{ exec -draft <a-x>s\h+$<ret>d }' + fi + } } 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 |
