Search code examples
emacscurly-bracescc-mode

How can can I get emacs to insert closing braces automatically


I've just started using emacs, and there's one feature I'd really like, and searching around a bit was fruitless. I hope someone else has done this because I don't want to learn elisp just yet.

void foo()<cursor>

I would like typing an "{" to cause this to happen

void foo(){
    <cursor>
}

I would like this to only happen in cc-mode, and only at the end of a line when not in a string/comment/etc

The first thing that came to mind was rebinding "{" to do this always(I could figure out how to do this myself), but it would be hard to make it only happen at the right time.

any hints would be appreciated.


Solution

  • This will do it:

    (defun my-c-mode-insert-lcurly ()
      (interactive)
      (insert "{")
      (let ((pps (syntax-ppss)))
        (when (and (eolp) (not (or (nth 3 pps) (nth 4 pps)))) ;; EOL and not in string or comment
          (c-indent-line)
          (insert "\n\n}")
          (c-indent-line)
          (forward-line -1)
          (c-indent-line))))
    
    (define-key c-mode-base-map "{" 'my-c-mode-insert-lcurly)