[slime-cvs] CVS update: slime/slime.el

Helmut Eller heller at common-lisp.net
Tue Dec 2 13:55:47 UTC 2003


Update of /project/slime/cvsroot/slime
In directory common-lisp.net:/tmp/cvs-serv8480

Modified Files:
	slime.el 
Log Message:
Patch by Sean O'Rourke:
slime-repl-{clear-buffer,clear-output}: clear the last and
entire output in the *slime-repl* buffer
(slime-documentation): pop up a buffer with a symbol's
documentation instead of its description, if found.
(slime-complete-symbol): tweak to completion, taken from ilisp, to
complete filenames inside strings.
(slime-set-default-directory): also set *slime-repl*'s
default-directory, so e.g. find-file makes sense.

(slime-with-xref-buffer): Remove spurious comma. (Reported by Raymond
Wiker).  

Some reordering of the xref code.

Date: Tue Dec  2 08:55:47 2003
Author: heller

Index: slime/slime.el
diff -u slime/slime.el:1.124 slime/slime.el:1.125
--- slime/slime.el:1.124	Mon Dec  1 20:33:14 2003
+++ slime/slime.el	Tue Dec  2 08:55:47 2003
@@ -1531,6 +1531,7 @@
 (defvar slime-repl-input-end-mark (let ((m (make-marker)))
                                     (set-marker-insertion-type m t)
                                     m))
+(defvar slime-repl-last-input-start-mark (make-marker))
 
 (defun slime-repl-mode () 
   "Major mode for interacting with a superior Lisp.
@@ -1612,6 +1613,8 @@
         (insert result "\n")))))
 
 (defun slime-mark-input-start ()
+  (set-marker slime-repl-last-input-start-mark
+              (marker-position slime-repl-input-start-mark))
   (set-marker slime-repl-input-start-mark (point) (current-buffer))
   (set-marker slime-repl-input-end-mark (point) (current-buffer)))
 
@@ -1695,6 +1698,27 @@
   (slime-repl-delete-current-input)
   (insert-and-inherit string))
 
+(defun slime-repl-input-line-beginning-position ()
+  (save-excursion
+    (goto-char slime-repl-input-start-mark)
+    (line-beginning-position)))
+
+(defun slime-repl-clear-buffer ()
+  (interactive)
+  (set-marker slime-repl-last-input-start-mark nil)
+  (let ((inhibit-read-only t))
+    (delete-region (point-min) (slime-repl-input-line-beginning-position))))
+
+(defun slime-repl-clear-output ()
+  (interactive)
+  (when (marker-position slime-repl-last-input-start-mark)
+    (delete-region slime-repl-last-input-start-mark
+                   (1- (slime-repl-input-line-beginning-position)))
+    (save-excursion
+      (goto-char slime-repl-last-input-start-mark)
+      (insert ";;; output flushed"))
+    (set-marker slime-repl-last-input-start-mark nil)))
+
 ;;; Scratch
 
 (defvar slime-scratch-mode-map)
@@ -1799,6 +1823,8 @@
   ("\t"   'slime-complete-symbol)
   (" "    'slime-space)
   ("\C-\M-x" 'slime-eval-defun)
+  ("\C-c\C-o" 'slime-repl-clear-output)
+  ("\C-c\C-t" 'slime-repl-clear-buffer)
   )
 
 (define-minor-mode slime-repl-read-mode 
@@ -2378,7 +2404,8 @@
        (message "Error: %S; slime-autodoc-mode now disabled." err)))))
 
 (defun slime-autodoc-message-ok-p ()
-  "Return true if printing a message is currently okay (shouldn't annoy the user)."
+  "Return true if printing a message is currently okay (shouldn't
+annoy the user)."
   (and slime-mode
        slime-autodoc-mode
        (null (current-message))
@@ -2482,13 +2509,15 @@
      ;; errors propagate.
      (message "Error in slime-complete-forget-window-configuration: %S" err))))
   
-(defun slime-complete-symbol ()
+(defun* slime-complete-symbol ()
   "Complete the symbol at point.
 If the symbol lacks an explicit package prefix, the current buffer's
 package is used."
   ;; NB: It is only the name part of the symbol that we actually want
   ;; to complete -- the package prefix, if given, is just context.
   (interactive)
+  (when (save-excursion (re-search-backward "\"[^ \t\n]+\\=" nil t))
+    (return-from slime-complete-symbol (comint-dynamic-complete-as-filename)))
   (let* ((end (slime-symbol-end-pos))
          (beg (slime-symbol-start-pos))
          (prefix (buffer-substring-no-properties beg end))
@@ -2845,6 +2874,14 @@
     (error "No symbol given"))
   (slime-eval-describe `(swank:describe-symbol ,symbol-name)))
 
+(defun slime-documentation (symbol-name)
+  "Display function- or symbol-documentation for SYMBOL-NAME."
+  (interactive (list (slime-read-symbol-name "Documentation for symbol: ")))
+  (when (not symbol-name)
+    (error "No symbol given"))
+  (slime-eval-describe 
+   `(swank:documentation-symbol ,symbol-name "(not documented))")))
+
 (defun slime-describe-function (symbol-name)
   (interactive (list (slime-read-symbol-name "Describe symbol: ")))
   (when (not symbol-name)
@@ -2939,6 +2976,8 @@
 ;;; XREF: cross-referencing
 
 (defvar slime-xref-mode-map)
+(defvar slime-xref-saved-window-configuration nil
+  "Buffer local variable in xref windows.")
 
 (define-derived-mode slime-xref-mode lisp-mode "xref"
   "\\<slime-xref-mode-map>
@@ -2961,41 +3000,33 @@
       (let ((key (if prefixed (concat slime-prefix-key key) key)))
         (define-key slime-xref-mode-map key command)))))
 
-(defun slime-who-calls (symbol)
-  "Show all known callers of the function SYMBOL."
-  (interactive (list (slime-read-symbol-name "Who calls: " t)))
-  (slime-xref 'calls symbol))
-
-(defun slime-who-references (symbol)
-  "Show all known referrers of the global variable SYMBOL."
-  (interactive (list (slime-read-symbol-name "Who references: " t)))
-  (slime-xref 'references symbol))
-
-(defun slime-who-binds (symbol)
-  "Show all known binders of the global variable SYMBOL."
-  (interactive (list (slime-read-symbol-name "Who binds: " t)))
-  (slime-xref 'binds symbol))
+
+;;;; XREF results buffer and window management
 
-(defun slime-who-sets (symbol)
-  "Show all known setters of the global variable SYMBOL."
-  (interactive (list (slime-read-symbol-name "Who sets: " t)))
-  (slime-xref 'sets symbol))
+(defun slime-xref-buffer (&optional create)
+  "Return the XREF results buffer.
+If CREATE is non-nil, create it if necessary."
+  (if create
+      (get-buffer-create "*CMUCL xref*")
+    (or (get-buffer "*CMUCL xref*")
+        (error "No XREF buffer"))))
 
-(defun slime-who-macroexpands (symbol)
-  "Show all known expanders of the macro SYMBOL."
-  (interactive (list (slime-read-symbol-name "Who macroexpands: " t)))
-  (slime-xref 'macroexpands symbol))
+(defun slime-init-xref-buffer (package ref-type symbol)
+  "Initialize the current buffer for displaying XREF information."
+  (slime-xref-mode)
+  (setq buffer-read-only nil)
+  (erase-buffer)
+  (setq slime-buffer-package package)
+  (slime-set-truncate-lines))
 
-(defun slime-xref (type symbol)
-  "Make an XREF request to Lisp."
-  (slime-eval-async
-   `(,(intern (format "swank:who-%s" type)) ',symbol)
-   (slime-buffer-package t)
-   (lexical-let ((type type)
-                 (symbol symbol)
-                 (package (slime-buffer-package)))
-     (lambda (result)
-       (slime-show-xrefs result type symbol package)))))
+(defun slime-display-xref-buffer ()
+  "Display the XREF results buffer in a window and select it."
+  (let* ((buffer (slime-xref-buffer))
+         (window (get-buffer-window buffer)))
+    (if (and window (window-live-p window))
+        (select-window window)
+      (select-window (display-buffer buffer t))
+      (shrink-window-if-larger-than-buffer))))
 
 (defmacro* slime-with-xref-buffer ((package ref-type symbol) &body body)
   "Execute BODY in a xref buffer, then show that buffer."
@@ -3009,23 +3040,14 @@
                   (slime-init-xref-buffer ,package ,type ,sym)
                   (make-local-variable 'slime-xref-saved-window-configuration)
                   (setq slime-xref-saved-window-configuration
-                        ,(current-window-configuration)))
+                        (current-window-configuration)))
              (progn , at body)
            (setq buffer-read-only t)
            (select-window (or (get-buffer-window (current-buffer) t)
                               (display-buffer (current-buffer) t)))
            (shrink-window-if-larger-than-buffer))))))
 
-(defun slime-show-xrefs (xrefs type symbol package)
-  "Show the results of an XREF query."
-  (if (null xrefs)
-      (message "No references found for %s." symbol)
-    (setq slime-next-location-function 'slime-goto-next-xref)
-    (slime-with-xref-buffer (package type symbol)
-      (slime-insert-xrefs xrefs)
-      (goto-char (point-min))
-      (forward-line)
-      (skip-chars-forward " \t"))))
+(put 'slime-with-xref-buffer 'lisp-indent-function 1)
 
 (defun slime-insert-xrefs (xrefs)
   "Insert XREFS in the current-buffer.
@@ -3041,39 +3063,55 @@
                        'face 'font-lock-keyword-face)
                  "  " label "\n")))))
 
+(defun slime-show-xrefs (xrefs type symbol package)
+  "Show the results of an XREF query."
+  (if (null xrefs)
+      (message "No references found for %s." symbol)
+    (setq slime-next-location-function 'slime-goto-next-xref)
+    (slime-with-xref-buffer (package type symbol)
+      (slime-insert-xrefs xrefs)
+      (goto-char (point-min))
+      (forward-line)
+      (skip-chars-forward " \t"))))
+
 
-;;;; XREF results buffer and window management
+;;; XREF commands
 
-(defun slime-xref-buffer (&optional create)
-  "Return the XREF results buffer.
-If CREATE is non-nil, create it if necessary."
-  (if create
-      (get-buffer-create "*CMUCL xref*")
-    (or (get-buffer "*CMUCL xref*")
-        (error "No XREF buffer"))))
+(defun slime-who-calls (symbol)
+  "Show all known callers of the function SYMBOL."
+  (interactive (list (slime-read-symbol-name "Who calls: " t)))
+  (slime-xref 'calls symbol))
 
-(defun slime-init-xref-buffer (package ref-type symbol)
-  "Initialize the current buffer for displaying XREF information."
-  (slime-xref-mode)
-  (setq buffer-read-only nil)
-  (erase-buffer)
-  (setq slime-buffer-package package)
-  (slime-set-truncate-lines))
+(defun slime-who-references (symbol)
+  "Show all known referrers of the global variable SYMBOL."
+  (interactive (list (slime-read-symbol-name "Who references: " t)))
+  (slime-xref 'references symbol))
 
+(defun slime-who-binds (symbol)
+  "Show all known binders of the global variable SYMBOL."
+  (interactive (list (slime-read-symbol-name "Who binds: " t)))
+  (slime-xref 'binds symbol))
 
+(defun slime-who-sets (symbol)
+  "Show all known setters of the global variable SYMBOL."
+  (interactive (list (slime-read-symbol-name "Who sets: " t)))
+  (slime-xref 'sets symbol))
 
-(put 'slime-with-xref-buffer 'lisp-indent-function 1)
+(defun slime-who-macroexpands (symbol)
+  "Show all known expanders of the macro SYMBOL."
+  (interactive (list (slime-read-symbol-name "Who macroexpands: " t)))
+  (slime-xref 'macroexpands symbol))
 
-(defun slime-display-xref-buffer ()
-  "Display the XREF results buffer in a window and select it."
-  (let* ((buffer (slime-xref-buffer))
-         (window (get-buffer-window buffer)))
-    (if (and window (window-live-p window))
-        (select-window window)
-      (select-window (display-buffer buffer t))
-      (set-window-text-height (selected-window)
-                              (min (count-lines (point-min) (point-max))
-                                   (window-text-height))))))
+(defun slime-xref (type symbol)
+  "Make an XREF request to Lisp."
+  (slime-eval-async
+   `(,(intern (format "swank:who-%s" type)) ',symbol)
+   (slime-buffer-package t)
+   (lexical-let ((type type)
+                 (symbol symbol)
+                 (package (slime-buffer-package)))
+     (lambda (result)
+       (slime-show-xrefs result type symbol package)))))
 
 
 ;;;; XREF navigation
@@ -3200,6 +3238,8 @@
 
 (defun slime-set-default-directory (directory)
   (interactive (list (read-file-name "Directory: " nil default-directory t)))
+  (with-current-buffer (slime-output-buffer)
+    (setq default-directory (expand-file-name directory)))
   (message "default-directory: %s" 
 	   (slime-eval `(swank:set-default-directory 
 			 ,(expand-file-name directory)))))





More information about the slime-cvs mailing list