If your Common
Lisp DEFCLASS
forms have been looking like fruit salad, despair
not! GNU/Emacs
and mwe-defclass-formatter.el
to the rescue:
Before:
(defclass identifier ()
((name :reader name-of :initarg :name)
(location :reader location-of :initarg :location)
(scope :accessor scope-of :initarg :scope)
(definition :accessor definition-of :initform nil))
(:default-initargs :scope *current-scope*))
After M-x mwe:align-defclass-slots RET:
(defclass identifier ()
((name :reader name-of :initarg :name)
(location :reader location-of :initarg :location)
(scope :accessor scope-of :initarg :scope)
(definition :accessor definition-of :initform nil))
(:default-initargs :scope *current-scope*))
Existence of this code snippet is clearly a proof that soccer does not deserve my full attention. I can do many other useless things at the same time!
Should this go into cl-indent.el? If so, whose version?
UPDATE 2006-06-27: Emacs Compatibility Issues
Stefan Kamphausen kindly wrote in to tell that my code works in recent Emacsen only:
I just tried your formatting function and it failed. You seem to be using a very recent version of just-one-space which takes an argument. My XEmacs as well as the GNU Emacs installed on my system don't feature such a version. I tried to come up with a little helper function and it seems to work fine. Maybe this is interesting to you.
(defun ensure-spaces (num)
"Helper function when you don't have a recent `just-one-space'."
(just-one-space)
(if (= num 0)
(backward-delete-char)
(loop repeat num
do
(insert " "))))
For what it's worth, here is my
GNU/Emacs's just-one-space (version 22.0.50.1):
(defun just-one-space (&optional n)
"Delete all spaces and tabs around point, leaving one space (or N spaces)."
(interactive "*p")
(let ((orig-pos (point)))
(skip-chars-backward " \t")
(constrain-to-field nil orig-pos)
(dotimes (i (or n 1))
(if (= (following-char) ?\s)
(forward-char 1)
(insert ?\s)))
(delete-region
(point)
(progn
(skip-chars-forward " \t")
(constrain-to-field nil orig-pos t)))))
UPDATE 2008-01-08: Old News...
The above functionality is part of Redshank mode now.
