Emacs ParEdit and IELM
ParEdit is a
powerful extension to Emacs that I've just begun using recently. It's
a minor mode that forces all parenthesis, square brackets, and quotes
to be balanced at all times. While it's useful for any programming
language it's especially suited for Lisps, because it's designed for
manipulating nested parenthesis — i.e. s-expressions. It's not
currently part of Emacs so you have to drop the script in
I've frequently thought that a Lisp-based shell would be an interesting and powerful tool, much like a normal Lisp REPL. Programs would be treated like Lisp functions. For example,
wellons@luna:~$ (ls -l .emacs) -rw------- 1 wellons wellons 4859 2010-06-10 23:20 .emacs wellons@luna:~$
But typing all those parenthesis all the time would be quite the nuisance. I know this from experience typing at Lisp REPLs. I imagined something that works exactly like ParEdit would be needed to make all that work go away. To save even more time each prompt would begin with a nested pair, with the cursor placed between them. Then typing a quick command is no different than a normal shell.
Well, in Emacs we have both ParEdit and REPLs, so we can compose these features together with just a little advice. Here's how to do it with the Interactive Emacs-Lisp Mode (IELM) REPL. First tell IELM to use ParEdit,
The function in IELM that spits out the next prompt
ielm-eval-input, so we give it the advice to call the
ParEdit function afterwards to insert a parenthesis pair.
And that's it! Note that the first IELM prompt is not placed by this function so it won't appear until the second prompt.
*** Welcome to IELM *** Type (describe-mode) for help. ELISP> ELISP> ()
If you want to enter a single atom and don't need parenthesis, just hit backspace once. This is much less common so it gets the extra keystroke.
This can be done for
and SLIME to enhance those REPLs as
well. You just have to figure out which defun to advise.