I'm curious what you don't like about the automatic insertion scheme
that you talked about. I'm using Parenedit with emacs and I'm quite
happy with it. I think the scheme is quite simple... whenever you type
'(', it inserts ')'. Similarly with '[' and '{'.
-Patrick
On Sep 26, 7:51 pm, blais <[email protected]> wrote:
> Hi,
>
> Writing Clojure code tends to require a larger mix of "()",
> "[]" and "{}" characters than other LISPs I use. This
> sometimes makes it a bit tiring to write those balanced
> expressions.
>
> Writing balanced expressions has been addressed in editors
> mainly by providing the automated insertion of matching
> characters when you type an opening character. This kind of
> support usually also comes with a fancy overloading of the
> default insertion behaviour of those characters to
> automatically skip extraneous ones, locking you into keeping
> everything balanced all the time; I find this extremely
> distracting and annoying to use, because it changes the
> behaviour I expect from my editor (it doesn't *always*
> insert, it is deeply troubling to me). I've tried it, and I
> could not get used to it.
>
> I came up with what I see as a better solution, and it feels
> right to me: a simple command to automatically insert the
> "correct" closing character at the current cursor location.
> For example, invoking the same command 4 times when the cursor
> is at the '|' location in the following expression will do
> the right thing:
>
> (comment
> (use '[merced.testinput :only (protocol|
>
> results in:
>
> (comment
> (use '[merced.testinput :only (protocol)]))
>
> One advantage of this approach is the absence of "modality,"
> i.e., the behaviour is the same in all contexts, e.g. when I
> type to insert, it always inserts. The new command means
> "insert to close the sequence here, whatever the sequence
> character is."
>
> If you want to try it, here is the corresponding Emacs code:
>
> (defvar close-matching-chars
> '( (?( . ?))
> (?[ . ?])
> (?{ . ?})
> (?< . >})
> ))
>
> (defun close-matching ()
> "Close with the most appropriate matching balanced character."
> (interactive)
> ;; Scan backwards until it stops.
> (let ((c (save-excursion
> (while (ignore-errors (forward-sexp -1) (not (<=
> (point) 1))))
> (backward-char 1)
> (string-to-char (thing-at-point 'char))
> )))
> (insert-char (cdr (assoc c close-matching-chars)) 1)
> ))
>
> Bind it to your favourite key (I use 'Ctrl-)' ):
>
> (global-set-key [(control \))] 'close-matching)
>
> Have fun,
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en