[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