summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ravi-init-cpp.el44
1 files changed, 41 insertions, 3 deletions
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 "<return>" 'newline-and-indent c-mode-base-map)
+ (bind-key "<return>" '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 "<return>" 'c-newline-and-indent c-mode-base-map)
(bind-key "<M-f8>" 'compile-dwim c-mode-base-map)