From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Robert Thorpe" Newsgroups: gmane.emacs.help Subject: Re: Several questions on SLIME customizations Date: 20 Nov 2006 11:42:14 -0800 Organization: http://groups.google.com Message-ID: <1164051734.496290.147640@b28g2000cwb.googlegroups.com> References: NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" X-Trace: sea.gmane.org 1164055245 1429 80.91.229.2 (20 Nov 2006 20:40:45 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 20 Nov 2006 20:40:45 +0000 (UTC) Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Mon Nov 20 21:40:43 2006 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1GmFwN-0004ue-JU for geh-help-gnu-emacs@m.gmane.org; Mon, 20 Nov 2006 21:40:32 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GmFwN-00089S-68 for geh-help-gnu-emacs@m.gmane.org; Mon, 20 Nov 2006 15:40:31 -0500 Original-Path: shelby.stanford.edu!newsfeed.stanford.edu!postnews.google.com!b28g2000cwb.googlegroups.com!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 114 Original-NNTP-Posting-Host: 163.244.62.65 Original-X-Trace: posting.google.com 1164051740 2742 127.0.0.1 (20 Nov 2006 19:42:20 GMT) Original-X-Complaints-To: groups-abuse@google.com Original-NNTP-Posting-Date: Mon, 20 Nov 2006 19:42:20 +0000 (UTC) In-Reply-To: User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6,gzip(gfe),gzip(gfe) X-HTTP-Via: 1.0 EMF1ASPROXY03 Complaints-To: groups-abuse@google.com Injection-Info: b28g2000cwb.googlegroups.com; posting-host=163.244.62.65; posting-account=hWoAPxMAAAAnBKSBz1ZivwUPPjEuve7bvVCHZQ8rhrluPfwcBJd92w Original-Xref: shelby.stanford.edu gnu.emacs.help:143227 Original-To: help-gnu-emacs@gnu.org X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:38844 Archived-At: Victor Kryukov wrote: > 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! Maybe best to ask on comp.lang.lisp, they use it a lot. > = 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))) That's quite a good idea. > 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 wouldn't worry about that. > 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. The ones you've used are fine. The reason you are encountering this problem is because emacs does not record the positions of beginning-of-defun etc, it discovers them each time. It may be argued that this is bad design. If you want a more functional version of beginning-of-defun you'll have to write it yourself. You can do this by wrapping (beginning-of-defun) (setq a (point)) in a function. Note, you could also do what you have done by using push-mark but your way is fine, maybe better. > 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 It doesn't. The code for this stuff is in /emacs-lisp/lisp.el BTW > and my elisp skills are too weak yet to program it myself - any > suggestions? Beginning-of-defun means that in the most broadest sense, it works with other forms like defmacro. > = 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? Probably, don't know. Code like the above very rarely works. Normally when a big internal Emacs feature is invoked it makes it's own buffers. People on comp.lang.lisp might know the right hook.