[climacs-cvs] CVS climacs
thenriksen
thenriksen at common-lisp.net
Wed Feb 6 09:23:02 UTC 2008
Update of /project/climacs/cvsroot/climacs
In directory clnet:/tmp/cvs-serv26158
Modified Files:
gui.lisp typeout.lisp
Log Message:
Blank typeout views before printing help information in them.
--- /project/climacs/cvsroot/climacs/gui.lisp 2008/02/05 22:07:31 1.260
+++ /project/climacs/cvsroot/climacs/gui.lisp 2008/02/06 09:22:58 1.261
@@ -695,5 +695,5 @@
;;; For the ESA help functions.
(defmethod invoke-with-help-stream ((frame climacs) title continuation)
- (with-typeout-view (stream title)
+ (with-typeout-view (stream title t)
(funcall continuation stream)))
--- /project/climacs/cvsroot/climacs/typeout.lisp 2008/02/05 22:07:31 1.7
+++ /project/climacs/cvsroot/climacs/typeout.lisp 2008/02/06 09:23:01 1.8
@@ -56,6 +56,16 @@
(defmethod clear-redisplay-information ((view typeout-view))
(setf (dirty view) t))
+(defun blank-typeout-view (view)
+ "Blank out the contents of the typeout view `view'."
+ (setf (output-history view) (make-instance 'standard-tree-output-record)
+ (last-cursor-position view) nil)
+ (clear-redisplay-information view)
+ ;; If it's on display, clear the window too.
+ (let ((window (find view (windows *application-frame*)
+ :key #'view)))
+ (when window (window-clear window))))
+
(defmethod handle-redisplay ((pane drei-pane) (view typeout-view) (region region))
(if (and (not (dirty view))
(eq (output-record-parent (output-history view))
@@ -106,24 +116,27 @@
(scroll-typeout-window
pane (- (bounding-rectangle-height (pane-viewport pane)))))
-(defun ensure-typeout-view (climacs label)
+(defun ensure-typeout-view (climacs label erase)
"Ensure that `climacs' has a typeout view with the name
-`label', and return that view."
+`label', and return that view. If `erase' is true, clear any
+already existing typeout view by that name first."
(check-type label string)
- (or (find-if #'(lambda (view)
- (and (typeout-view-p view)
- (string= (name view) label)))
- (views climacs))
+ (or (let ((view (find-if #'(lambda (view)
+ (and (typeout-view-p view)
+ (string= (name view) label)))
+ (views climacs))))
+ (when (and view erase) (blank-typeout-view view))
+ view)
(make-new-view-for-climacs climacs 'typeout-view
:name label)))
;; Because specialising on the type of `climacs' is so useful...
-(defun invoke-with-typeout-view (climacs label continuation)
+(defun invoke-with-typeout-view (climacs label erase continuation)
"Call `continuation' with a single argument, a
stream meant for typeout. `Climacs' is the Climacs instance in
which the typeout pane should be shown, and `label' is the name
of the created typeout view. Returns NIL."
- (let* ((typeout-view (ensure-typeout-view climacs label))
+ (let* ((typeout-view (ensure-typeout-view climacs label erase))
(pane-with-typeout-view (or (find typeout-view (windows climacs)
:key #'view)
(let ((pane (split-window t)))
@@ -141,11 +154,13 @@
(setf (dirty typeout-view) t)
nil)))
-(defmacro with-typeout-view ((stream &optional (label "Typeout")) &body body)
+(defmacro with-typeout-view ((stream &optional (label "Typeout") erase)
+ &body body)
"Evaluate `body' with `stream' bound to a stream that can be
used for typeout. `Label' is the name of the created typeout
-view."
- `(invoke-with-typeout-view *esa-instance* ,label
+view. If `erase' is true, clear the contents of any existing
+typeout view with that name."
+ `(invoke-with-typeout-view *esa-instance* ,label ,erase
#'(lambda (,stream)
, at body)))
More information about the Climacs-cvs
mailing list