Cedit and Paredit

I recently discovered cedit , which provides some structural commands for editing c-like languages. (See this Emacs Rocks! episode if you’re not familiar with the concept: it introduces paredit , a structural editing mode for lisps).

So, it deals with curly braces and semicolons, keeping things balanced and correct as show in its screencast . It mentions that it integrates with paredit rather than duplicating all its functionality. After setting up cedit, I decided to try enabling paredit alongside cedit and disabling autopair. Once I did, however, I noticed an annoying formatting issue: If I were to type foo and then ( , paredit would format this as foo () , which makes sense, considering that paredit is written for lisps — s-expressions are usually separated by spaces — but not so much for c-like languages.

I was thinking about disabling paredit and going back to autopair, when I decided to look through the configuration variables for paredit. Turns out it provides paredit-space-for-delimiter-predicates , which is a list of functions that control whether a space should be inserted. So, solving the formatting issue turned out to be pretty simple:

      (defun ap/cedit-space-delimiter-p (endp delimiter)
"Don't insert a space before delimiters in c-style modes"
(not cedit-mode))
(add-to-list 'paredit-space-for-delimiter-predicates #'ap/cedit-space-delimiter-p)
     

Hopefully that saves someone some time if they try to use the two together.