;;; -*-Scheme-*-
;;;
-;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/evlcom.scm,v 1.37 1992/06/01 21:55:55 cph Exp $
+;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/evlcom.scm,v 1.38 1992/08/18 23:31:58 cph Exp $
;;;
;;; Copyright (c) 1986, 1989-92 Massachusetts Institute of Technology
;;;
false
boolean?)
+(define-variable disable-evaluation-commands
+ "If true, evaluation commands signal an error."
+ false
+ boolean?)
+
+(define-variable evaluate-in-inferior-repl
+ "If true, evaluation commands evaluate expressions in an inferior REPL.
+Also, the inferior REPL's run light appears in all Scheme mode buffers.
+Otherwise, expressions are evaluated directly by the commands."
+ false
+ boolean?)
+\f
(define-variable transcript-buffer-name
"Name of evaluation transcript buffer.
This can also be a buffer object."
This can be either a mode object or the name of one."
'scheme)
+(define-variable transcript-buffer-read-only
+ "If true, transcript buffer is initialized to read-only when created."
+ true
+ boolean?)
+
(define-variable transcript-output-wrapper
"A procedure that is called to setup transcript output.
It is passed a thunk as its only argument.
"If true, evaluation commands are disabled in the transcript buffer."
true
boolean?)
-
-(define-variable disable-evaluation-commands
- "If true, evaluation commands signal an error."
- false
- boolean?)
-
-(define-variable evaluate-in-inferior-repl
- "If true, evaluation commands evaluate expressions in an inferior REPL.
-Also, the inferior REPL's run light appears in all Scheme mode buffers.
-Otherwise, expressions are evaluated directly by the commands."
- false
- boolean?)
\f
;;;; Commands
(inferior-repl-eval-expression (current-repl-buffer) expression))
(else
(if (ref-variable enable-transcript-buffer buffer)
- (insert-string
- (fluid-let ((*unparse-with-maximum-readability?* true))
- (write-to-string expression))
- (buffer-end (transcript-buffer))))
+ (call-with-transcript-buffer
+ (lambda (buffer)
+ (insert-string
+ (fluid-let ((*unparse-with-maximum-readability?* true))
+ (write-to-string expression))
+ (buffer-end buffer)))))
(editor-eval buffer
expression
(evaluation-environment buffer)))))))
"Select the transcript buffer."
()
(lambda ()
- (select-buffer (transcript-buffer))))
+ (call-with-transcript-buffer select-buffer)))
\f
;;;; Expression Prompts
(if evaluation-input-recorder
(evaluation-input-recorder region)))
(if (ref-variable enable-transcript-buffer buffer)
- (insert-region (region-start region)
- (region-end region)
- (buffer-end (transcript-buffer))))
+ (call-with-transcript-buffer
+ (lambda (buffer)
+ (insert-region (region-start region)
+ (region-end region)
+ (buffer-end buffer)))))
(bind-condition-handler (list condition-type:error)
evaluation-error-handler
(lambda ()
(let ((output-wrapper (ref-variable transcript-output-wrapper)))
(if output-wrapper
(output-wrapper thunk)
- (let ((output-port
- (let ((buffer (transcript-buffer)))
- (mark->output-port (buffer-end buffer) buffer))))
- (fresh-line output-port)
- (with-output-to-port output-port thunk))))
+ (call-with-transcript-buffer
+ (lambda (buffer)
+ (let ((output-port
+ (mark->output-port (buffer-end buffer) buffer)))
+ (fresh-line output-port)
+ (with-output-to-port output-port thunk))))))
(let ((value))
(let ((output
(with-output-to-string
(*unparser-list-breadth-limit*
(ref-variable transcript-list-breadth-limit)))
(write-to-string value))))
+\f
+(define (call-with-transcript-buffer procedure)
+ (let ((buffer (transcript-buffer)))
+ (let ((group (buffer-group buffer))
+ (outside)
+ (inside false))
+ (dynamic-wind (lambda ()
+ (set! outside (group-read-only? group))
+ (if inside
+ (set-group-read-only! group)
+ (set-group-writeable! group)))
+ (lambda ()
+ (procedure buffer))
+ (lambda ()
+ (set! inside (group-read-only? group))
+ (if outside
+ (set-group-read-only! group)
+ (set-group-writeable! group)))))))
(define (transcript-buffer)
(let ((name (ref-variable transcript-buffer-name)))
(set-buffer-major-mode!
buffer
(->mode (ref-variable transcript-buffer-mode)))
+ (if (ref-variable transcript-buffer-read-only)
+ (set-buffer-read-only! buffer))
(if (ref-variable transcript-disable-evaluation)
- (define-variable-local-value! buffer
- (ref-variable-object disable-evaluation-commands)
- true))
+ (add-buffer-initialization! buffer
+ (lambda ()
+ (local-set-variable! disable-evaluation-commands true)
+ (if (eq? (buffer-major-mode buffer)
+ (ref-mode-object scheme))
+ (begin
+ (local-set-variable! evaluate-in-inferior-repl
+ false)
+ (local-set-variable! run-light false))))))
buffer)))))
\ No newline at end of file
;;; -*-Scheme-*-
;;;
-;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/intmod.scm,v 1.48 1992/06/05 21:38:54 cph Exp $
+;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/intmod.scm,v 1.49 1992/08/18 23:32:10 cph Exp $
;;;
;;; Copyright (c) 1986, 1989-92 Massachusetts Institute of Technology
;;;
true
boolean?)
-(define (transcript-output-mark buffer)
- (and (ref-variable repl-enable-transcript-buffer buffer)
- (ref-variable enable-transcript-buffer buffer)
- (buffer-end (transcript-buffer))))
+(define (call-with-transcript-output-mark buffer procedure)
+ (if (and (ref-variable repl-enable-transcript-buffer buffer)
+ (ref-variable enable-transcript-buffer buffer))
+ (call-with-transcript-buffer
+ (lambda (buffer)
+ (procedure (buffer-end buffer))))
+ (procedure false)))
(define-variable repl-error-decision
"If true, errors in REPL evaluation force the user to choose an option.
(end-input-wait port))))
\f
(define (inferior-repl-eval-region buffer region)
- (let ((mark (transcript-output-mark buffer)))
- (if mark
- (insert-region (region-start region)
- (region-end region)
- mark)))
+ (call-with-transcript-output-mark buffer
+ (lambda (mark)
+ (if mark
+ (insert-region (region-start region)
+ (region-end region)
+ mark))))
(let ((port (buffer-interface-port buffer)))
(let ((end
(let ((end (buffer-end buffer))
(end-input-wait port)))))
(define (inferior-repl-eval-expression buffer expression)
- (let ((mark (transcript-output-mark buffer)))
- (if mark
- (insert-string (fluid-let ((*unparse-with-maximum-readability?* true))
- (write-to-string expression))
- mark)))
+ (call-with-transcript-output-mark buffer
+ (lambda (mark)
+ (if mark
+ (insert-string
+ (fluid-let ((*unparse-with-maximum-readability?* true))
+ (write-to-string expression))
+ mark))))
(let ((port (buffer-interface-port buffer)))
(let ((end (buffer-end buffer)))
(set-buffer-point! buffer end)
(define (process-output-queue port)
(let ((interrupt-mask (set-interrupt-enables! interrupt-mask/gc-ok))
- (mark (port/mark port))
- (transcript-mark (transcript-output-mark (port/buffer port))))
- (let loop ()
- (let ((operation (dequeue!/unsafe (port/output-queue port) false)))
- (if operation
- (begin
- (operation mark false)
- (if transcript-mark (operation transcript-mark true))
- (loop)))))
- (let ((strings (port/output-strings port)))
- (if (not (null? strings))
- (begin
- (set-port/output-strings! port '())
- (do ((strings (reverse! strings) (cdr strings)))
- ((null? strings))
- (region-insert-string! mark (car strings))
- (if transcript-mark
- (region-insert-string! transcript-mark (car strings)))))))
+ (mark (port/mark port)))
+ (call-with-transcript-output-mark (port/buffer port)
+ (lambda (transcript-mark)
+ (let loop ()
+ (let ((operation (dequeue!/unsafe (port/output-queue port) false)))
+ (if operation
+ (begin
+ (operation mark false)
+ (if transcript-mark (operation transcript-mark true))
+ (loop)))))
+ (let ((strings (port/output-strings port)))
+ (if (not (null? strings))
+ (begin
+ (set-port/output-strings! port '())
+ (do ((strings (reverse! strings) (cdr strings)))
+ ((null? strings))
+ (region-insert-string! mark (car strings))
+ (if transcript-mark
+ (region-insert-string! transcript-mark
+ (car strings)))))))))
(set-interrupt-enables! interrupt-mask))
true)
\f