home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 3
/
PDCD_3.iso
/
utilities
/
utilsd
/
edit
/
!lEdit
/
l
/
lispmode
< prev
next >
Wrap
Text File
|
1995-01-21
|
20KB
|
570 lines
;;; *** lEdit - Lisp Editor ***
;;; (c) 1995 Urs Bisang
;;; Version 0.1
;;;
;;; dieses file enthaelt die routinen und handler speziell fuer
;;; den lisp modus von ledit!
;;;
;;; *** globale variablen ***
;; der name eines neuen text buffers
(define *lisp-untitled-name* "<untitled>")
;; default werte des options menu
(define *lisp-options-pause* 1.0)
;; der name des lisp modes
(define *lisp-mode-name* 'Lisp)
;; default name zum speichern von lisp files
(define *lisp-default-name* "LispFile")
;; ** globale state variablen fuer das options menu **
;; automatisches paren matching nach eingabe einer
;; schliessenden klammer
(define *lisp-option-match* #t)
;; automatisches einruecken nach dem eingabe von return
(define *lisp-option-ident* #t)
;; flag fuer animation beim einruecken
(define *lisp-option-animate* #t)
;; flag fuer spezielles einruecken (shift-TAB!)
(define *lisp-special-ident* #f)
;;; *** lisp editor window menus ***
;; ** misc submenu **
(define lisp-misc-submenu
(menu-new "Misc" ">Info,New view,Print,Undo F8,Redo F9"))
;; handle die submenu eintraege
(define (lisp-handle-misc-submenu item text)
(let ((i (menu-subitem item)))
(cond
((menu-item i 1) (show-proginfo))
((menu-item i 2) (text-new-view text))
((menu-item i 3) (text-print text))
((menu-item i 4) (txt-undo text))
((menu-item i 5) (txt-redo text)))))
;; ** save submenu **
;; handle die submenu eintraege
(define (lisp-handle-save-submenu item text)
(cond
((= (length item) 2) (text-saveas text))
((= (length item) 1) (text-save text))
(else (ierr "bad save selection"))))
;; ** select submenu **
(define lisp-select-submenu
(menu-new "Select" ">Save,Print,Copy ^C,Move ^V,Delete ^X,Clear ^Z"))
;; update submenu bevor es angezeigt wird
(define (lisp-update-select-submenu)
;; falls keine text-selection vorliegt mache die
;; entsprechenden menu Eintraege nicht selektierbar
(if (txtscrap-selectowner)
(menu-change lisp-select-submenu
setflags: 0 0 entry: 1
setflags: 0 0 entry: 2
setflags: 0 0 entry: 3
setflags: 0 0 entry: 4
setflags: 0 0 entry: 5
setflags: 0 0 entry: 6)
(menu-change lisp-select-submenu
setflags: 0 1 entry: 1
setflags: 0 1 entry: 2
setflags: 0 1 entry: 3
setflags: 0 1 entry: 4
setflags: 0 1 entry: 5
setflags: 0 1 entry: 6)))
;; handle die submenu eintraege
(define (lisp-handle-select-submenu item text)
(let ((i (menu-subitem item)))
(cond
((menu-item i 1) (text-save-selection text))
((menu-item i 2) (text-print-selection text))
((menu-item i 3) (text-copy-selection text))
((menu-item i 4) (text-move-selection text))
((menu-item i 5) (text-delete-selection))
((menu-item i 6) (text-clear-selection)))))
;; ** edit submenu **
(define lisp-edit-submenu
(menu-new "Edit" (string-concat
">Find F4,>Goto F5,>Replace F6,"
"Ident TAB,RecIdent ^R,Match () ^M,"
"Next ( ^A,Previous ( ^S,Next ) ^D,"
"Previous ) ^F")))
;; handle die submenu eintraege
(define (lisp-handle-edit-submenu item text)
(let ((i (menu-subitem item)))
(cond
((menu-item i 1) (text-find-dbox text))
((menu-item i 2) (text-goto-dbox text))
((menu-item i 3) (text-replace-dbox text))
((menu-item i 4) (lisp-identline text))
((menu-item i 5) (lisp-rec-identline text))
((menu-item i 6) (lisp-ctrl-m text))
((menu-item i 7) (lisp-next-opening-paren text))
((menu-item i 8) (lisp-previous-opening-paren text))
((menu-item i 9) (lisp-next-closing-paren text))
((menu-item i 10) (lisp-previous-closing-paren text)))))
;; ** options submenu **
(define lisp-options-submenu
(menu-new "Options" "Ident,Match (),Animate"))
;; update submenu bevor es angezeigt wird
(define (lisp-update-options-submenu)
(menu-change lisp-options-submenu
setflags: (if *lisp-option-ident* 1 0) 0 entry: 1)
(menu-change lisp-options-submenu
setflags: (if *lisp-option-match* 1 0) 0 entry: 2)
(menu-change lisp-options-submenu
setflags: (if *lisp-option-animate* 1 0) 0 entry: 3))
;; handle die submenu eintraege
(define (lisp-handle-options-submenu item text)
(let ((i (menu-subitem item)))
(cond
((menu-item i 1) (set! *lisp-option-ident*
(not *lisp-option-ident*)))
((menu-item i 2) (set! *lisp-option-match*
(not *lisp-option-match*)))
((menu-item i 3) (set! *lisp-option-animate*
(not *lisp-option-animate*))))))
;; ** das haupt menu fuer den lisp mode **
(define lisp-ledit-menu
(menu-new "lEdit" "Misc,>Save F3,Select,Edit,Options"))
(menu-change lisp-ledit-menu
submenu: lisp-misc-submenu entry: 1
submenu: lisp-select-submenu entry: 3
submenu: lisp-edit-submenu entry: 4
submenu: lisp-options-submenu entry: 5)
;; der handler und maker fuer das editor window menu
(define (lisp-ledit-menu-maker&handler item text)
(cond
((equal? item :make-menu) (lisp-ledit-menu-maker text))
((menu-item item 1) (lisp-handle-misc-submenu item text))
((menu-item item 2) (lisp-handle-save-submenu item text))
((menu-item item 3) (lisp-handle-select-submenu item text))
((menu-item item 4) (lisp-handle-edit-submenu item text))
((menu-item item 5) (lisp-handle-options-submenu item text))
(else (ierr "unknown menu item"))))
;; der maker fuer das editor window menu
(define (lisp-ledit-menu-maker text)
(lisp-update-select-submenu)
(lisp-update-options-submenu)
lisp-ledit-menu)
;; lade ein lisp file und zeige es in einem neuen window an.
;; pruefe ob das file schon mal geladen wurde
(define (lisp-load-file filename)
(if (not (text-file-loaded? filename)) ; schon geladen ?
(let ((text (gensym)))
(set-eval! text (txt-new ""))
(setp! text 'modename *lisp-mode-name*)
(setp! text 'defaultname *lisp-default-name*)
(setp! text 'filename filename)
(setp! text 'update-handler text-update-title)
(text-update-title text)
(txt-eventhandler text lisp-event-handler)
(event-attachmenumaker (txt-syshandle text)
lisp-ledit-menu-maker&handler
text)
(txt-show text)
(if (not (txt-load text filename 0 #t))
(werr 0 "can't load file '" filename "'"))
(text-cursor-home text) ; zeige den anfang des files
(txt-setcharoptions text 4 0) ; file nicht upgedated !
(set! *text-bufferlist* (cons text *text-bufferlist*)))))
;; oeffne ein neues editor window und trage den buffer
;; in die text buffer liste ein
(define (lisp-new-editor-window)
(let ((text (gensym)))
(set-eval! text (txt-new ""))
(setp! text 'modename *lisp-mode-name*)
(setp! text 'defaultname *lisp-default-name*)
(setp! text 'update-handler text-update-title)
(text-update-title text)
(txt-eventhandler text lisp-event-handler)
(event-attachmenumaker (txt-syshandle text)
lisp-ledit-menu-maker&handler
text)
(txt-show text)
(set! *text-bufferlist* (cons text *text-bufferlist*))))
;; ** der default handler fuer mouse events **
(define (lisp-handle-mouse text x)
(cond
((txt-icon-dragged? x) (text-insert-dragged-file text))
((txt-select-clicked? x) (lisp-select-clicked text x))
((txt-adjust-clicked? x) (if (txt-selectset text)
(lisp-adjust-p