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.