help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Several questions on SLIME customizations


From: Victor Kryukov
Subject: Several questions on SLIME customizations
Date: Sat, 18 Nov 2006 23:32:45 -0600
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (darwin)

Hello list,

I've a couple emacs customization/elisp questions, which are not very
closely related, except that they have one unifying theme: making life
under SLIME better (as I understand it). I would appreciate if you
could answer at least some of them - and of course, feel free to share
you strategies to customize SLIME!

= Redefining TAB. =

I tried TextMate recently (yes, luckily I live under Mac OS X; no, I
don't want to start another flame war), and I especially like how it
treats TAB key - ok, ok, I know that their behaviour is risky because
it's context-dependent, but vim users somehow manage to accomodate to
multiple contexts ;).

Anyway, TAB is too valuable key to spare, as it's very easy to type,
and in my use case, I never need to use it _alone_: most often during
editing I need to wrap a bunch of lines into let statement, say, so I
need to indent a whole region anyway. Hence my strategy was like this:

(global-set-key "\r" 'newline-and-indent)

makes Return indent next line automatically, and the following function
indents the whole defun:

(defun indent-defun ()
  (interactive)
  (let (a b)
    (beginning-of-defun)
    (setq a (point))
    (end-of-defun)
    (setq b (point))
    (indent-region a b)))

After that, we don't need TAB for any indenting purposes, and can
redefine it to something more useful (we redefined default key binding
for indent-region, as we don't need it that often):

(add-hook 'slime-mode-hook
          (lambda ()
            (local-set-key "\C-i" 'slime-complete-symbol)
            (local-set-key "\C-\M-\\" 'indent-defun)))

So far so good - pressing TAB auto-completes all known symbols, and
makes typing code much easier (at least for me). Here is the questions
I have:

1. indent-defun looks terribly ugly for many reasons: a/ it is not LISPish -
more like a BASIC program directly translated into Lisp; I would like
to write something like

(defun indent-defun ()
  (interactive)
  (indent-region (beginning-of-defun) (end-of-defun)))

but I don't know which elisp function(s) to use. b/ it will not work with
defmacro, or with any other top-level form. I would like to have something
like (beginning-of-top-level-form) - again, I don't know if such beast
exists and my elisp skills are too weak yet to program it myself - any
suggestions?


= Renaming buffers =

I am playing with several lisp implementations - clisp, Allegro CL
Express and SBCL to be precise. I would like their slime buffers to
have names like *clisp*, *allegro* and *sbcl* instead of *slime-repl
sbcl* etc. I tried to rename these buffers:

(defun sbcl ()
  (interactive)
  (setq inferior-lisp-program "/usr/local/bin/sbcl")
  (slime)
  (rename-buffer "*sbcl*"))

but what happens is that buffer is renamed _before_ slime finishes
loading lisp, and after it finish, it renames the buffer back. Can I
attach a function to the moment when slime finish it's load process -
like defining hook for a major mode?

Best,
Victor.
   


reply via email to

[Prev in Thread] Current Thread [Next in Thread]