~ubuntu-branches/ubuntu/maverick/slime/maverick

« back to all changes in this revision

Viewing changes to contrib/inferior-slime.el

  • Committer: Bazaar Package Importer
  • Author(s): Peter Van Eynde
  • Date: 2007-10-04 09:09:47 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20071004090947-8oy7djtx8no3erxy
Tags: 1:20070927-2
Readded tree-widget to the sources. emacs21 on
debian does _not_ have that file. emacs22 and xemacs do.
(Closes: #445174)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
;;; inferior-slime.el --- Minor mode with Slime keys for comint buffers
 
2
;;
 
3
;; Author: Luke Gorrie  <luke@synap.se>
 
4
;; License: GNU GPL (same license as Emacs)
 
5
;;
 
6
;;; Installation:
 
7
;;
 
8
;; Add something like this to your .emacs: 
 
9
;;
 
10
;;   (add-to-list 'load-path "<directory-of-this-file>")
 
11
;;   (add-hook 'slime-load-hook (lambda () (require 'inferior-slime)))
 
12
;;   (add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode 1)))
 
13
 
 
14
(define-minor-mode inferior-slime-mode
 
15
  "\\<slime-mode-map>\
 
16
Inferior SLIME mode: The Inferior Superior Lisp Mode for Emacs.
 
17
 
 
18
This mode is intended for use with `inferior-lisp-mode'. It provides a
 
19
subset of the bindings from `slime-mode'.
 
20
 
 
21
\\{inferior-slime-mode-map}"
 
22
  nil
 
23
  nil
 
24
  ;; Fake binding to coax `define-minor-mode' to create the keymap
 
25
  '((" " 'undefined)))
 
26
 
 
27
(add-to-list 'minor-mode-alist
 
28
             '(inferior-slime-mode
 
29
               (" Inf-Slime" slime-state-name)))
 
30
 
 
31
(defun inferior-slime-return ()
 
32
  "Handle the return key in the inferior-lisp buffer.
 
33
The current input should only be sent if a whole expression has been
 
34
entered, i.e. the parenthesis are matched.
 
35
 
 
36
A prefix argument disables this behaviour."
 
37
  (interactive)
 
38
  (if (or current-prefix-arg (inferior-slime-input-complete-p))
 
39
      (comint-send-input)
 
40
    (insert "\n")
 
41
    (inferior-slime-indent-line)))
 
42
 
 
43
(defun inferior-slime-indent-line ()
 
44
  "Indent the current line, ignoring everything before the prompt."
 
45
  (interactive)
 
46
  (save-restriction
 
47
    (let ((indent-start
 
48
           (save-excursion
 
49
             (goto-char (process-mark (get-buffer-process (current-buffer))))
 
50
             (let ((inhibit-field-text-motion t))
 
51
               (beginning-of-line 1))
 
52
             (point))))
 
53
      (narrow-to-region indent-start (point-max)))
 
54
    (lisp-indent-line)))
 
55
 
 
56
(defun inferior-slime-input-complete-p ()
 
57
  "Return true if the input is complete in the inferior lisp buffer."
 
58
  (slime-input-complete-p (process-mark (get-buffer-process (current-buffer)))
 
59
                          (point-max)))
 
60
 
 
61
(defun inferior-slime-closing-return ()
 
62
  "Send the current expression to Lisp after closing any open lists."
 
63
  (interactive)
 
64
  (goto-char (point-max))
 
65
  (save-restriction
 
66
    (narrow-to-region (process-mark (get-buffer-process (current-buffer)))
 
67
                      (point-max))
 
68
    (while (ignore-errors (save-excursion (backward-up-list 1) t))
 
69
      (insert ")")))
 
70
  (comint-send-input))
 
71
 
 
72
(defun inferior-slime-init-keymap ()
 
73
  (let ((map inferior-slime-mode-map))
 
74
    (define-key map [return] 'inferior-slime-return)
 
75
    (define-key map [(control return)] 'inferior-slime-closing-return)
 
76
    (define-key map [(meta control ?m)] 'inferior-slime-closing-return)
 
77
    (define-key map "\C-c\C-d" slime-doc-map)
 
78
    (define-key map "\C-c\C-w" slime-who-map)
 
79
    (loop for (key command . keys) in slime-keys do
 
80
          (destructuring-bind (&key prefixed inferior &allow-other-keys) keys
 
81
            (when prefixed
 
82
              (setq key (concat slime-prefix-key key)))
 
83
            (when inferior
 
84
              (define-key map key command))))))
 
85
 
 
86
(inferior-slime-init-keymap)
 
87
 
 
88
(provide 'inferior-slime)