[mcclim-cvs] CVS mcclim
thenriksen
thenriksen at common-lisp.net
Thu Jan 31 19:17:57 UTC 2008
Update of /project/mcclim/cvsroot/mcclim
In directory clnet:/tmp/cvs-serv6356
Modified Files:
input-editing-drei.lisp input-editing.lisp
Log Message:
Moved some input-editing functions around.
The typeout area is now cleared at the end of an input-editing session.
--- /project/mcclim/cvsroot/mcclim/input-editing-drei.lisp 2008/01/30 22:29:07 1.10
+++ /project/mcclim/cvsroot/mcclim/input-editing-drei.lisp 2008/01/31 19:17:57 1.11
@@ -100,12 +100,9 @@
(define-condition rescan-condition (condition)
())
-(defgeneric finalize (editing-stream input-sensitizer)
- (:documentation "Do any cleanup on an editing stream, like turning off the
- cursor, etc."))
-
(defmethod finalize ((stream drei:drei-input-editing-mixin)
input-sensitizer)
+ (call-next-method)
(setf (cursor-visibility stream) nil)
(let ((real-stream (encapsulating-stream-stream stream))
(record (drei:drei-instance stream)))
@@ -124,24 +121,6 @@
(setf (stream-cursor-position real-stream)
(values 0 (nth-value 3 (input-editing-stream-bounding-rectangle stream))))))
-(defmethod invoke-with-input-editing :around ((stream extended-output-stream)
- continuation
- input-sensitizer
- initial-contents
- class)
- (declare (ignore continuation input-sensitizer initial-contents class))
- (letf (((cursor-visibility (stream-text-cursor stream)) nil))
- (call-next-method)))
-
-(defmethod invoke-with-input-editing :around (stream
- continuation
- input-sensitizer
- initial-contents
- class)
- (declare (ignore continuation input-sensitizer initial-contents class))
- (with-activation-gestures (*standard-activation-gestures*)
- (call-next-method)))
-
;; XXX: We are supposed to implement input editing for all
;; "interactive streams", but that's not really reasonable. We only
;; care about `clim-stream-pane's, at least for Drei, currently.
--- /project/mcclim/cvsroot/mcclim/input-editing.lisp 2008/01/30 23:39:19 1.62
+++ /project/mcclim/cvsroot/mcclim/input-editing.lisp 2008/01/31 19:17:57 1.63
@@ -2,7 +2,7 @@
;;; (c) copyright 2001 by
;;; Tim Moore (moore at bricoworks.com)
-;;; (c) copyright 2006 by
+;;; (c) copyright 2006-2008 by
;;; Troels Henriksen (athas at sigkill.dk)
;;; This library is free software; you can redistribute it and/or
@@ -219,18 +219,47 @@
(stream-scan-pointer ,stream-var))))
, at body)))
+(defmacro with-input-editor-typeout ((&optional (stream t) &rest args
+ &key erase)
+ &body body)
+ "`Stream' is not evaluated and must be a symbol. If T (the
+default), `*standard-input*' will be used. `Stream' will be bound
+to an `extended-output-stream' while `body' is being evaluated."
+ (declare (ignore erase))
+ (check-type stream symbol)
+ (let ((stream (if (eq stream t) '*standard-output* stream)))
+ `(invoke-with-input-editor-typeout
+ ,stream
+ #'(lambda (,stream)
+ , at body)
+ , at args)))
+
+(defun clear-typeout (&optional (stream t))
+ "Blank out the input-editor typeout displayed on `stream',
+defaulting to T for `*standard-output*'."
+ (with-input-editor-typeout (stream :erase t)
+ (declare (ignore stream))))
+
(defun input-editing-rescan-loop (editing-stream continuation)
(let ((start-scan-pointer (stream-scan-pointer editing-stream)))
- (loop
- (block rescan
- (handler-bind ((rescan-condition
- #'(lambda (c)
- (reset-scan-pointer editing-stream start-scan-pointer)
- ;; Input-editing contexts above may be interested...
- (signal c)
- (return-from rescan nil))))
- (return-from input-editing-rescan-loop
- (funcall continuation editing-stream)))))))
+ (loop (block rescan
+ (handler-bind ((rescan-condition
+ #'(lambda (c)
+ (reset-scan-pointer editing-stream start-scan-pointer)
+ ;; Input-editing contexts above may be interested...
+ (signal c)
+ (return-from rescan nil))))
+ (return-from input-editing-rescan-loop
+ (funcall continuation editing-stream)))))))
+
+(defgeneric finalize (editing-stream input-sensitizer)
+ (:documentation "Do any cleanup on an editing stream that is no
+longer supposed to be used for editing, like turning off the
+cursor, etc."))
+
+(defmethod finalize ((stream input-editing-stream) input-sensitizer)
+ (clear-typeout stream)
+ (redraw-input-buffer stream))
(defgeneric invoke-with-input-editing
(stream continuation input-sensitizer initial-contents class)
@@ -254,6 +283,28 @@
(stream-default-view stream))))
(input-editing-rescan-loop stream continuation))
+(defmethod invoke-with-input-editing :around ((stream extended-output-stream)
+ continuation
+ input-sensitizer
+ initial-contents
+ class)
+ (declare (ignore continuation input-sensitizer initial-contents class))
+ (letf (((cursor-visibility (stream-text-cursor stream)) nil))
+ (call-next-method)))
+
+(defmethod invoke-with-input-editing :around (stream
+ continuation
+ input-sensitizer
+ initial-contents
+ class)
+ (declare (ignore continuation input-sensitizer initial-contents class))
+ (with-activation-gestures (*standard-activation-gestures*)
+ (call-next-method)))
+
+(defgeneric invoke-with-input-editor-typeout (stream continuation &key erase)
+ (:documentation "Call `continuation' with a single argument, a
+stream to do input-editor-typeout on."))
+
(defgeneric input-editing-stream-bounding-rectangle (stream)
(:documentation "Return the bounding rectangle of `stream' as
four values. This function does not appear in the spec but is
More information about the Mcclim-cvs
mailing list