home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / utilities / utilsd / edit / !lEdit / l / lispmode < prev    next >
Text File  |  1995-01-21  |  20KB  |  570 lines

  1. ;;;                  ***  lEdit - Lisp Editor  ***
  2. ;;;                       (c) 1995 Urs Bisang
  3. ;;;                          Version 0.1  
  4. ;;;
  5. ;;;   dieses file enthaelt die routinen und handler speziell fuer
  6. ;;;   den lisp modus von ledit! 
  7. ;;;
  8.                                      
  9.  
  10. ;;; *** globale variablen ***
  11.  
  12. ;; der name eines neuen text buffers
  13. (define *lisp-untitled-name* "<untitled>")
  14.                                
  15. ;; default werte des options menu
  16. (define *lisp-options-pause* 1.0)
  17.  
  18. ;; der name des lisp modes
  19. (define *lisp-mode-name* 'Lisp)
  20.  
  21. ;; default name zum speichern von lisp files
  22. (define *lisp-default-name* "LispFile")
  23.  
  24. ;; ** globale state variablen fuer das options menu **
  25.  
  26. ;; automatisches paren matching nach eingabe einer
  27. ;; schliessenden klammer
  28. (define *lisp-option-match* #t)
  29.  
  30. ;; automatisches einruecken nach dem eingabe von return
  31. (define *lisp-option-ident* #t)
  32.  
  33. ;; flag fuer animation beim einruecken
  34. (define *lisp-option-animate* #t)
  35.  
  36. ;; flag fuer spezielles einruecken (shift-TAB!) 
  37. (define *lisp-special-ident* #f)
  38.  
  39.  
  40. ;;; ***  lisp editor window menus ***
  41.              
  42. ;; ** misc submenu **  
  43.  
  44. (define lisp-misc-submenu
  45.   (menu-new "Misc" ">Info,New view,Print,Undo     F8,Redo     F9"))
  46.  
  47. ;; handle die submenu eintraege
  48. (define (lisp-handle-misc-submenu item text)
  49.    (let ((i (menu-subitem item)))
  50.      (cond 
  51.        ((menu-item i 1) (show-proginfo))
  52.        ((menu-item i 2) (text-new-view text))
  53.        ((menu-item i 3) (text-print text))
  54.        ((menu-item i 4) (txt-undo text))
  55.        ((menu-item i 5) (txt-redo text)))))
  56.  
  57.  
  58. ;; ** save submenu **
  59.           
  60. ;; handle die submenu eintraege
  61. (define (lisp-handle-save-submenu item text)
  62.   (cond 
  63.     ((= (length item) 2) (text-saveas text))
  64.     ((= (length item) 1) (text-save text))
  65.     (else (ierr "bad save selection"))))
  66.  
  67.  
  68. ;; ** select submenu **
  69.  
  70. (define lisp-select-submenu
  71.   (menu-new "Select" ">Save,Print,Copy   ^C,Move   ^V,Delete ^X,Clear  ^Z"))
  72.  
  73. ;; update submenu bevor es angezeigt wird
  74. (define (lisp-update-select-submenu)
  75.   ;; falls keine text-selection vorliegt mache die
  76.   ;; entsprechenden menu Eintraege nicht selektierbar
  77.   (if (txtscrap-selectowner)
  78.       (menu-change lisp-select-submenu
  79.         setflags: 0 0 entry: 1
  80.         setflags: 0 0 entry: 2
  81.         setflags: 0 0 entry: 3
  82.         setflags: 0 0 entry: 4
  83.         setflags: 0 0 entry: 5
  84.         setflags: 0 0 entry: 6)
  85.       (menu-change lisp-select-submenu
  86.         setflags: 0 1 entry: 1
  87.         setflags: 0 1 entry: 2
  88.         setflags: 0 1 entry: 3
  89.         setflags: 0 1 entry: 4
  90.         setflags: 0 1 entry: 5
  91.         setflags: 0 1 entry: 6))) 
  92.  
  93. ;; handle die submenu eintraege
  94. (define (lisp-handle-select-submenu item text)
  95.   (let ((i (menu-subitem item)))
  96.     (cond            
  97.       ((menu-item i 1)  (text-save-selection text))
  98.       ((menu-item i 2)  (text-print-selection text))
  99.       ((menu-item i 3)  (text-copy-selection text))
  100.       ((menu-item i 4)  (text-move-selection text))
  101.       ((menu-item i 5)  (text-delete-selection))
  102.       ((menu-item i 6)  (text-clear-selection)))))
  103.  
  104.  
  105. ;; ** edit submenu **
  106.  
  107. (define lisp-edit-submenu
  108.   (menu-new "Edit" (string-concat
  109.                      ">Find        F4,>Goto        F5,>Replace     F6," 
  110.                      "Ident      TAB,RecIdent    ^R,Match ()    ^M,"
  111.                      "Next (      ^A,Previous (  ^S,Next )      ^D,"
  112.                      "Previous )  ^F")))
  113.  
  114. ;; handle die submenu eintraege
  115. (define (lisp-handle-edit-submenu item text)
  116.   (let ((i (menu-subitem item)))
  117.     (cond            
  118.       ((menu-item i 1)  (text-find-dbox text))
  119.       ((menu-item i 2)  (text-goto-dbox text))
  120.       ((menu-item i 3)  (text-replace-dbox text))
  121.       ((menu-item i 4)  (lisp-identline text))
  122.       ((menu-item i 5)  (lisp-rec-identline text))
  123.       ((menu-item i 6)  (lisp-ctrl-m text))
  124.       ((menu-item i 7)  (lisp-next-opening-paren text))
  125.       ((menu-item i 8)  (lisp-previous-opening-paren text))
  126.       ((menu-item i 9)  (lisp-next-closing-paren text))
  127.       ((menu-item i 10) (lisp-previous-closing-paren text)))))
  128.  
  129.  
  130. ;; ** options submenu **
  131.  
  132. (define lisp-options-submenu
  133.   (menu-new "Options" "Ident,Match (),Animate"))
  134.  
  135. ;; update submenu bevor es angezeigt wird
  136. (define (lisp-update-options-submenu) 
  137.   (menu-change lisp-options-submenu 
  138.                setflags: (if *lisp-option-ident* 1 0) 0 entry: 1)
  139.   (menu-change lisp-options-submenu 
  140.                setflags: (if *lisp-option-match* 1 0) 0 entry: 2)
  141.   (menu-change lisp-options-submenu 
  142.                setflags: (if *lisp-option-animate* 1 0) 0 entry: 3))
  143.  
  144. ;; handle die submenu eintraege
  145. (define (lisp-handle-options-submenu item text)
  146.   (let ((i (menu-subitem item)))
  147.     (cond            
  148.       ((menu-item i 1)  (set! *lisp-option-ident*
  149.                               (not *lisp-option-ident*)))
  150.       ((menu-item i 2)  (set! *lisp-option-match*
  151.                               (not *lisp-option-match*)))
  152.       ((menu-item i 3)  (set! *lisp-option-animate*
  153.                               (not *lisp-option-animate*))))))
  154.  
  155. ;; ** das haupt menu fuer den lisp mode **
  156.  
  157. (define lisp-ledit-menu
  158.   (menu-new "lEdit" "Misc,>Save    F3,Select,Edit,Options")) 
  159.  
  160. (menu-change lisp-ledit-menu
  161.              submenu: lisp-misc-submenu entry: 1
  162.              submenu: lisp-select-submenu entry: 3
  163.              submenu: lisp-edit-submenu entry: 4
  164.              submenu: lisp-options-submenu entry: 5) 
  165.                                 
  166. ;; der handler und maker fuer das editor window menu
  167. (define (lisp-ledit-menu-maker&handler item text)
  168.    (cond 
  169.      ((equal? item :make-menu) (lisp-ledit-menu-maker text))
  170.      ((menu-item item 1) (lisp-handle-misc-submenu item text))
  171.      ((menu-item item 2) (lisp-handle-save-submenu item text))
  172.      ((menu-item item 3) (lisp-handle-select-submenu item text))
  173.      ((menu-item item 4) (lisp-handle-edit-submenu item text))
  174.      ((menu-item item 5) (lisp-handle-options-submenu item text))
  175.      (else (ierr "unknown menu item"))))
  176.                                           
  177. ;; der maker fuer das editor window menu
  178. (define (lisp-ledit-menu-maker text)  
  179.   (lisp-update-select-submenu)
  180.   (lisp-update-options-submenu)
  181.   lisp-ledit-menu)
  182.  
  183.  
  184. ;; lade ein  lisp file und zeige es in einem neuen window an.
  185. ;; pruefe ob das file schon mal geladen wurde
  186. (define (lisp-load-file filename)
  187.   (if (not (text-file-loaded? filename)) ; schon geladen ?
  188.       (let ((text (gensym)))
  189.         (set-eval! text (txt-new "")) 
  190.         (setp! text 'modename *lisp-mode-name*)
  191.         (setp! text 'defaultname *lisp-default-name*)
  192.         (setp! text 'filename filename)
  193.         (setp! text 'update-handler text-update-title)
  194.         (text-update-title text)
  195.         (txt-eventhandler  text lisp-event-handler)
  196.         (event-attachmenumaker (txt-syshandle text)         
  197.                                lisp-ledit-menu-maker&handler
  198.                                text)
  199.         (txt-show text)
  200.         (if (not (txt-load text filename 0 #t))
  201.             (werr 0 "can't load file '" filename "'"))
  202.         (text-cursor-home text) ; zeige den anfang des files
  203.         (txt-setcharoptions text 4 0) ; file nicht upgedated !
  204.         (set! *text-bufferlist* (cons text *text-bufferlist*))))) 
  205.  
  206.  
  207. ;;  oeffne ein neues editor window und trage den buffer 
  208. ;;  in die text buffer liste ein
  209. (define (lisp-new-editor-window) 
  210.  (let ((text (gensym)))
  211.    (set-eval! text (txt-new "")) 
  212.    (setp! text 'modename *lisp-mode-name*)
  213.    (setp! text 'defaultname *lisp-default-name*)
  214.    (setp! text 'update-handler text-update-title)
  215.    (text-update-title text)
  216.    (txt-eventhandler  text lisp-event-handler)
  217.    (event-attachmenumaker (txt-syshandle text)         
  218.                           lisp-ledit-menu-maker&handler
  219.                           text)
  220.    (txt-show text)
  221.    (set! *text-bufferlist* (cons text *text-bufferlist*)))) 
  222.                                                  
  223.        
  224. ;; ** der default handler fuer mouse events  **
  225.  
  226. (define (lisp-handle-mouse text x) 
  227.   (cond
  228.     ((txt-icon-dragged? x)     (text-insert-dragged-file text))
  229.     ((txt-select-clicked? x)   (lisp-select-clicked text x))
  230.     ((txt-adjust-clicked? x)   (if (txt-selectset text)
  231.                                    (lisp-adjust-p