From 6df51326f2c41ecf9027ab2a0eb3e3aba24a04da Mon Sep 17 00:00:00 2001 From: Ravi R Kiran Date: Mon, 6 Jan 2014 09:17:27 -0800 Subject: closing delimiters and more spacing fixes diff --git a/ravi-init-cpp.el b/ravi-init-cpp.el index f9ca601..eb1d2c9 100644 --- a/ravi-init-cpp.el +++ b/ravi-init-cpp.el @@ -151,7 +151,7 @@ (doxymacs-font-lock) ;(define-key c-mode-base-map [return] 'c-context-line-break) - (bind-key "" 'newline-and-indent c-mode-base-map) + (bind-key "" 'c-newline-and-indent c-mode-base-map) (unbind-key "M-j" c-mode-base-map) (bind-key "C-c C-i" 'c-includes-current-file c-mode-base-map) @@ -364,8 +364,46 @@ this to 3 makes header-protection define KIG_MISC_NEWTYPE_H for a file named ) (defadvice c-electric-semi&comma (after ravi/add-space-after-comma activate) - (when (looking-back ",") - (if (looking-at " [^)]") (forward-char) (insert-char ?\s)))) + (cond + ((looking-back ",") + (if (looking-at " [^)]") (forward-char) (insert-char ?\s))) + ((looking-back ") ;[[:space:]\n]*") + (save-excursion + (re-search-backward " ;[[:space:]\n]*") + (delete-char 1))))) + + (defmacro ravi/fake-send-key (key-to-bind char-to-bind) + (let ((command (key-binding key-to-bind))) + (setq last-command-event char-to-bind) + (setq this-command command) + (call-interactively command)) + ) + + (defun ravi/insert-closing-delimiter() + (interactive) + (if (c-in-literal) + (self-insert-command) + (progn + ;; Find nearest unmatched opening delimiter + (let (brace-type) + (save-excursion + (backward-up-list) + (cond + ((looking-at "{") (setq brace-type 'brace-type-brace)) + ((looking-at "(") (setq brace-type 'brace-type-paren)) + ((looking-at "\\[") (setq brace-type 'brace-type-square)) + (t (setq brace-type 'brace-type-none)) + )) + (cond + ((eq brace-type 'brace-type-brace) (ravi/fake-send-key "}" ?\})) + ((eq brace-type 'brace-type-paren) (ravi/fake-send-key ")" ?\))) + ; Uncommenting the line below would lead to infinite recursion + ;((eq 'brace-type 'brace-type-square) (ravi/fake-send-key "]" ?\])) + (t (self-insert-command 1)) + ) + )))) + + (bind-key "]" 'ravi/insert-closing-delimiter c-mode-base-map) (bind-key "" 'c-newline-and-indent c-mode-base-map) (bind-key "" 'compile-dwim c-mode-base-map) -- cgit v0.10.1