347 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Scheme
		
	
	
	
			
		
		
	
	
			347 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Scheme
		
	
	
	
| ;;;
 | ||
| ;;;	Copyright (c) 1985 Massachusetts Institute of Technology
 | ||
| ;;;
 | ||
| ;;;	This material was developed by the Scheme project at the
 | ||
| ;;;	Massachusetts Institute of Technology, Department of
 | ||
| ;;;	Electrical Engineering and Computer Science.  Permission to
 | ||
| ;;;	copy this software, to redistribute it, and to use it for any
 | ||
| ;;;	purpose is granted, subject to the following restrictions and
 | ||
| ;;;	understandings.
 | ||
| ;;;
 | ||
| ;;;	1. Any copy made of this software must include this copyright
 | ||
| ;;;	notice in full.
 | ||
| ;;;
 | ||
| ;;;	2. Users of this software agree to make their best efforts (a)
 | ||
| ;;;	to return to the MIT Scheme project any improvements or
 | ||
| ;;;	extensions that they make, so that these may be included in
 | ||
| ;;;	future releases; and (b) to inform MIT of noteworthy uses of
 | ||
| ;;;	this software.
 | ||
| ;;;
 | ||
| ;;;	3.  All materials developed as a consequence of the use of
 | ||
| ;;;	this software shall duly acknowledge such use, in accordance
 | ||
| ;;;	with the usual standards of acknowledging credit in academic
 | ||
| ;;;	research.
 | ||
| ;;;
 | ||
| ;;;	4. MIT has made no warrantee or representation that the
 | ||
| ;;;	operation of this software will be error-free, and MIT is
 | ||
| ;;;	under no obligation to provide any services, by way of
 | ||
| ;;;	maintenance, update, or otherwise.
 | ||
| ;;;
 | ||
| ;;;	5.  In conjunction with products arising from the use of this
 | ||
| ;;;	material, there shall be no use of the name of the
 | ||
| ;;;	Massachusetts Institute of Technology nor of any adaptation
 | ||
| ;;;	thereof in any advertising, promotional, or sales literature
 | ||
| ;;;	without prior written consent from MIT in each case.
 | ||
| ;;;
 | ||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | ||
| ;;;
 | ||
| ;;;     Modified by Texas Instruments Inc 8/15/85
 | ||
| ;;;
 | ||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | ||
| 
 | ||
| ;;;Lisp commands
 | ||
| 
 | ||
| (define *current-mode-scheme?* #!true)
 | ||
| 
 | ||
| (define ^r-lisp-insert-paren-command '())			;3.02
 | ||
| (define paren-mark '())						;3.02
 | ||
| (define (cached-paren-mark) paren-mark)				;3.02
 | ||
| (define (cache-paren-mark mark) (set! paren-mark mark))		;3.02
 | ||
| 
 | ||
| (define-initial-command-key ("^R Lisp Insert Paren" (argument 1))
 | ||
|   "Insert close paren, showing matching parens"
 | ||
| (              ;;;;(
 | ||
|  (define-initial-key  #\) procedure)
 | ||
|  (set! ^r-lisp-insert-paren-command procedure)			;3.02
 | ||
| )
 | ||
|   (insert-chars (current-command-char) argument (current-point))
 | ||
|   (if *current-mode-scheme?*
 | ||
|       (if (not (char-ready? buffer-screen))
 | ||
|           (let ((mark (if (cached-paren-mark)			;3.02
 | ||
|                           (backward-sexp:top (cached-paren-mark)  ;3.02
 | ||
|                                              (group-start (current-point))
 | ||
|                                              1)
 | ||
|                           (backward-one-list (current-point)
 | ||
|                                              (group-start (current-point))))))
 | ||
|             (if mark
 | ||
|                 (let ((string (line-string (mark-line mark))))
 | ||
|                   (cache-paren-mark mark)			;3.02
 | ||
|                   (set-temp-message-status)
 | ||
|                   (set-screen-cursor! typein-screen 0 0)
 | ||
|                   (%substring-display string (mark-position mark) 
 | ||
| 				      (string-length string) 0 typein-screen)
 | ||
|                   (if (window-mark-visible? (current-window) mark)
 | ||
|                       (let ((old-point (current-point)))
 | ||
|                         (set-current-point! mark)
 | ||
|                         (with-reverse-attributes)
 | ||
|                         (set-current-point! old-point))))
 | ||
| 		(beep))))))
 | ||
| 
 | ||
| ;;;(define %%temp (lambda () (with-reverse-attributes)))
 | ||
| 
 | ||
| ;;;
 | ||
| 
 | ||
| 
 | ||
| ;;;
 | ||
| 
 | ||
| (define-initial-command-key ("^R Forward Sexp" (argument 1))
 | ||
| "Move forward one sexp"
 | ||
| (
 | ||
| (define-initial-key (list meta-char (integer->char 6)) procedure) ;;; M C-F
 | ||
| )
 | ||
| (move-thing forward-sexp argument))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Backward Sexp" (argument 1))
 | ||
| "Move backward one sexp"
 | ||
| (
 | ||
| (define-initial-key (list meta-char (integer->char 2)) procedure) ;;; M C-B
 | ||
| )
 | ||
| (move-thing backward-sexp argument))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Mark Sexp" (argument 1))
 | ||
|   "Set mark one or more sexp from point."
 | ||
| (
 | ||
|  (define-initial-key (list meta-char alt-char (integer->char 3)) procedure)
 | ||
|                                                             ;;; C-M-@
 | ||
| )
 | ||
|   (mark-thing forward-sexp argument))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Kill Sexp" (argument 1))
 | ||
|  "Kill one or more sexp forward"
 | ||
| (
 | ||
|  (define-initial-key (list meta-char (integer->char 11)) procedure) ;;; M C-K
 | ||
| )
 | ||
|  (kill-thing forward-sexp argument))
 | ||
| 
 | ||
| ;;;(define-initial-command-key ("^R Backward Kill sexp" (argument 1))
 | ||
| ;;;  "Kill one or more words backwards"
 | ||
| ;;;(
 | ||
| ;;; (define-initial-key (list ctrl-z-char #\backspace) procedure)   ;;; C-Z backsp
 | ||
| ;;;)
 | ||
| ;;;  (kill-thing backward-sexp argument))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Forward List"(argument 1))
 | ||
|   "Move forward over one list"
 | ||
| (
 | ||
| (define-initial-key (list meta-char (integer->char 14)) procedure) ;; M C-N
 | ||
| )
 | ||
|   (move-thing forward-list argument))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Backward List"(argument 1))
 | ||
|   "Move backward over one list"
 | ||
| (
 | ||
| (define-initial-key (list meta-char (integer->char 16)) procedure) ;; M C-P
 | ||
| )
 | ||
|   (move-thing backward-list argument))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Forward Down List" (argument 1))
 | ||
|   "Move down one level of list structure, forward."
 | ||
| (
 | ||
| (define-initial-key (list meta-char (integer->char 4)) procedure) ;;M C-D
 | ||
| )
 | ||
|   (move-thing forward-down-list argument))
 | ||
| 
 | ||
| ;;; (define-initial-command-key ("^R Backward Down List" (argument 1))
 | ||
| ;;;  "Move down one level of list structure, backward."
 | ||
| ;;;(#!false)
 | ||
| ;;;  (move-thing backward-down-list argument))
 | ||
| 
 | ||
| ;;;(define-initial-command-key ("^R Forward Up List" (argument 1))
 | ||
| ;;;  "Move up one level of list structure, forward."
 | ||
| ;;;(                                                      ;;;(
 | ||
| ;;; (define-initial-key (list ctrl-z-char #\) ) procedure)    ;;; ( C-Z )
 | ||
| ;;;)
 | ||
| ;;;  (move-thing forward-up-list argument))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Backward Up List" (argument 1))
 | ||
|   "Move up one level of list structure, backward."
 | ||
| (
 | ||
| (define-initial-key (list meta-char (integer->char 21)) procedure)
 | ||
| )
 | ||
|   (move-thing backward-up-list argument))
 | ||
| 
 | ||
| 
 | ||
| ;;; New commands added
 | ||
| 
 | ||
| ;;; Some additional commands
 | ||
| 
 | ||
| ;;; File commands
 | ||
| 
 | ||
| (define-initial-command-key ("^R Set File Read Only" argument)
 | ||
|   " Make file read-only, or not."
 | ||
| (
 | ||
|  (define-initial-key (list ctrl-x-char (integer->char 17)) procedure);;C-XC-Q
 | ||
| )
 | ||
|   (setup-current-buffer-read-only! argument))
 | ||
| 
 | ||
| 
 | ||
| (define-initial-command-key ("^R Buffer Not Modified" argument)
 | ||
|   "Pretend that buffer has not been Modified."
 | ||
| (
 | ||
|  (define-initial-key (list meta-char #\~) procedure) ;; M-~
 | ||
| )
 | ||
|  (buffer-not-modified! (current-buffer)))
 | ||
| 
 | ||
| 
 | ||
| ;;; Line Commands
 | ||
| 
 | ||
| (define-initial-command-key ("^R Open Line" (argument 1))
 | ||
|   "Insert a newline at point. Cursor remains at its position."
 | ||
| (
 | ||
|  (define-initial-key (integer->char 15) procedure)     ;;;; C-O
 | ||
| )
 | ||
|  (let ((m* (mark-right-inserting (current-point))))
 | ||
|    (insert-newlines argument )
 | ||
|    (set-current-point! m*)))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Set Goal Column" argument)
 | ||
|   "Set (or flush) a permanent goal for vertical motion"
 | ||
| (
 | ||
|  (define-initial-key (list ctrl-x-char (integer->char 14)) procedure)
 | ||
| )                                                  ;;; C-X C-N
 | ||
|  (set! goal-column
 | ||
|        (and (not argument)
 | ||
|             (mark-column (current-point)))))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Tab" (argument 1))
 | ||
|   "Insert a tab character"
 | ||
| (
 | ||
|  (define-initial-key #\tab procedure)
 | ||
|  (define-initial-key (integer->char 9) procedure)
 | ||
|  (define-initial-key (list meta-char #\tab) procedure)
 | ||
| )
 | ||
|  (if *current-mode-scheme?* 
 | ||
|      (lisp-indent-line (current-point))
 | ||
|      (insert-chars #\tab argument (current-point))))
 | ||
| 
 | ||
| 
 | ||
| (define-initial-command-key ("^R Indent Sexp" (argument 1))
 | ||
|   "Indent a sexp"
 | ||
| (
 | ||
|  (define-initial-key (list meta-char (integer->char 17)) procedure) ;;M C-Q
 | ||
| )
 | ||
|  (if *current-mode-scheme?* 
 | ||
|      (lisp-indent-sexp (current-point))))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Change Mode" argument)
 | ||
| " Change mode to Scheme"
 | ||
| (
 | ||
|  (define-initial-key (list ctrl-x-char (integer->char 13)) procedure);;C-X C-M
 | ||
| )
 | ||
|  (set! *current-mode-scheme?* (if *current-mode-scheme?* #!false #!true))
 | ||
|  (window-modeline-event! '() 'mode-changed))
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| (define-initial-command-key ("^R Delete Horizontal Space" argument)
 | ||
|   " delete all spaces and tab characters around point."
 | ||
| (
 | ||
|   (define-initial-key (list meta-char #\\) procedure)    ;;; M-\
 | ||
| )
 | ||
|   (delete-horizontal-space))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Just One Space" argument)
 | ||
|   " Delete all spaces and tabs around point, leaving one Space."
 | ||
| (
 | ||
|   (define-initial-key (list meta-char #\space) procedure) ;;; M-space
 | ||
| )
 | ||
|   (delete-horizontal-space)
 | ||
|   (insert-chars #\space 1 (current-point)))
 | ||
| 
 | ||
| (define lisp-indent 2)
 | ||
| 
 | ||
| (define-initial-command-key ("^R Indent New Line" argument)
 | ||
|   "Insert new line then indent the second line"
 | ||
| (
 | ||
|   (define-initial-key (integer->char 10) procedure) ;;; C-J
 | ||
| )
 | ||
|   (insert-newlines 1)
 | ||
|   (if *current-mode-scheme?*
 | ||
|       (lisp-indent-line (current-point))
 | ||
|       (insert-chars #\tab 1 (current-point))))
 | ||
| 
 | ||
| 
 | ||
| ;;; compile command
 | ||
| 
 | ||
| (define-initial-command-key ("^R Compile Region" argument)
 | ||
|   " Compile the region"
 | ||
|  (
 | ||
|   (define-initial-key (list meta-char (integer->char 26)) procedure);;M C-Z
 | ||
|  )
 | ||
|   (if *current-mode-scheme?* 
 | ||
|       (%compile-region
 | ||
|          (make-region (current-point) (current-mark)))
 | ||
|       (^r-bad-command argument)))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Compile Buffer" argument)
 | ||
|   " Compile the buffer"
 | ||
|  (
 | ||
|   (define-initial-key (list meta-char #\o) procedure)   ;;; M-O
 | ||
|   (define-initial-key (list alt-char (integer->char 24)) procedure) ;;;alt O
 | ||
|  )
 | ||
|   (if *current-mode-scheme?* 
 | ||
|       (%compile-region
 | ||
|          (buffer-region (current-buffer)))
 | ||
|       (^r-bad-command argument)))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Compile Sexp" (argument 1))
 | ||
|   " Compile the sexp"
 | ||
|  (
 | ||
|   (define-initial-key (list meta-char (integer->char 24)) procedure);;;M C-X
 | ||
|  )
 | ||
|   (if *current-mode-scheme?* 
 | ||
|       (begin
 | ||
|        (mark-thing forward-sexp argument)
 | ||
|        (%compile-region (current-region)))
 | ||
|       (^r-bad-command argument)))
 | ||
| 
 | ||
| (define (%compile-region region)
 | ||
|   (region->file region "edwin.tmp")
 | ||
|   (restore-console-contents)
 | ||
|   (make-pcs-status-visible)
 | ||
|   (reset-typein-window)
 | ||
|   (gc)
 | ||
|   (load "edwin.tmp")
 | ||
|   ((fluid editor-continuation) 'OK))
 | ||
| 
 | ||
| (define-initial-command-key ("^R Toggle windows" argument)
 | ||
|   " Display edwin window in upper half and scheme in the lower half"
 | ||
|  (
 | ||
|   (define-initial-key (list ctrl-x-char #\!) procedure)   ;;; C-X !
 | ||
|  )
 | ||
|   (if *split-screen-mode?*
 | ||
|       (begin
 | ||
|        (set! *split-screen-mode?* #!false)
 | ||
|        (move-editor-to-full)
 | ||
|        (move-pcs-to-full)
 | ||
|        (make-pcs-status-invisible)
 | ||
|        (window-y-size-changed (current-window))
 | ||
|        (update-display! (current-window))
 | ||
|        (reset-modeline-window)
 | ||
|        (reset-typein-window))
 | ||
|       (begin
 | ||
|        (set! *split-screen-mode?* #!true)
 | ||
|        (move-editor-to-upper-half)
 | ||
|        (move-pcs-window-lower)
 | ||
|        (window-y-size-changed (current-window))
 | ||
|        (update-display! (current-window))
 | ||
|        (reset-modeline-window)
 | ||
|        (reset-typein-window)
 | ||
|        (restore-console-contents)
 | ||
|        (make-pcs-status-visible)
 | ||
|        (gc))))
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| (define edwin-reset-windows
 | ||
|   (lambda ()
 | ||
|     (save-console-contents)
 | ||
|     (make-pcs-status-visible)
 | ||
|     (move-pcs-to-full)
 | ||
|     (%clear-window blank-screen)
 | ||
|     (restore-console-contents)
 | ||
|     (gc)))
 | ||
| 
 | ||
| 
 |