home *** CD-ROM | disk | FTP | other *** search
/ Education Sampler 1992 [NeXTSTEP] / Education_1992_Sampler.iso / NeXT / GnuSource / emacs-15.0.3 / lisp / ledit.el < prev    next >
Lisp/Scheme  |  1990-07-19  |  5KB  |  140 lines

  1. ;; Emacs side of ledit interface
  2. ;; Copyright (C) 1985 Free Software Foundation, Inc.
  3.  
  4. ;; This file is part of GNU Emacs.
  5.  
  6. ;; GNU Emacs is distributed in the hope that it will be useful,
  7. ;; but WITHOUT ANY WARRANTY.  No author or distributor
  8. ;; accepts responsibility to anyone for the consequences of using it
  9. ;; or for whether it serves any particular purpose or works at all,
  10. ;; unless he says so in writing.  Refer to the GNU Emacs General Public
  11. ;; License for full details.
  12.  
  13. ;; Everyone is granted permission to copy, modify and redistribute
  14. ;; GNU Emacs, but only under the conditions described in the
  15. ;; GNU Emacs General Public License.   A copy of this license is
  16. ;; supposed to have been given to you along with GNU Emacs so you
  17. ;; can know your rights and responsibilities.  It should be in a
  18. ;; file named COPYING.  Among other things, the copyright notice
  19. ;; and this notice must be preserved on all copies.
  20.  
  21.  
  22. ;;; To do:
  23. ;;; o lisp -> emacs side of things (grind-definition and find-definition)
  24.  
  25. (defvar ledit-mode-map nil)
  26.  
  27. (defconst ledit-zap-file (concat "/tmp/" (getenv "USER") ".l1")
  28.   "File name for data sent to Lisp by Ledit.")
  29. (defconst ledit-read-file (concat "/tmp/" (getenv "USER") ".l2")
  30.   "File name for data sent to Ledit by Lisp.")
  31. (defconst ledit-compile-file 
  32.   (concat "/tmp/" (getenv "USER") ".l4")
  33.   "File name for data sent to Lisp compiler by Ledit.")
  34. (defconst ledit-buffer "*LEDIT*"
  35.   "Name of buffer in which Ledit accumulates data to send to Lisp.")
  36. ;These are now in loaddefs.el
  37. ;(defconst ledit-save-files t
  38. ;  "*Non-nil means Ledit should save files before transferring to Lisp.")
  39. ;(defconst ledit-go-to-lisp-string "%?lisp"
  40. ;  "*Shell commands to execute to resume Lisp job.")
  41. ;(defconst ledit-go-to-liszt-string "%?liszt"
  42. ;  "*Shell commands to execute to resume Lisp compiler job.")
  43.  
  44. (defun ledit-save-defun ()
  45.   "Save the current defun in the ledit buffer"
  46.   (interactive)
  47.   (save-excursion
  48.    (end-of-defun)
  49.    (let ((end (point)))
  50.      (beginning-of-defun)
  51.      (append-to-buffer ledit-buffer (point) end))
  52.    (message "Current defun saved for Lisp")))
  53.  
  54. (defun ledit-save-region (beg end)
  55.   "Save the current region in the ledit buffer"
  56.   (interactive "r")
  57.   (append-to-buffer ledit-buffer beg end)
  58.   (message "Region saved for Lisp"))
  59.  
  60. (defun ledit-zap-defun-to-lisp ()
  61.   "Carry the current defun to lisp"
  62.   (interactive)
  63.   (ledit-save-defun)
  64.   (ledit-go-to-lisp))
  65.  
  66. (defun ledit-zap-defun-to-liszt ()
  67.   "Carry the current defun to liszt"
  68.   (interactive)
  69.   (ledit-save-defun)
  70.   (ledit-go-to-liszt))
  71.  
  72. (defun ledit-zap-region-to-lisp (beg end)
  73.   "Carry the current region to lisp"
  74.   (interactive "r")
  75.   (ledit-save-region beg end)
  76.   (ledit-go-to-lisp))
  77.  
  78. (defun ledit-go-to-lisp ()
  79.   "Suspend Emacs and restart a waiting Lisp job."
  80.   (interactive)
  81.   (if ledit-save-files
  82.       (save-some-buffers))
  83.   (if (get-buffer ledit-buffer)
  84.       (save-excursion
  85.        (set-buffer ledit-buffer)
  86.        (goto-char (point-min))
  87.        (write-region (point-min) (point-max) ledit-zap-file)
  88.        (erase-buffer)))
  89.   (suspend-emacs ledit-go-to-lisp-string)
  90.   (load ledit-read-file t t))
  91.  
  92. (defun ledit-go-to-liszt ()
  93.   "Suspend Emacs and restart a waiting Liszt job."
  94.   (interactive)
  95.   (if ledit-save-files
  96.       (save-some-buffers))
  97.   (if (get-buffer ledit-buffer)
  98.       (save-excursion
  99.        (set-buffer ledit-buffer)
  100.        (goto-char (point-min))
  101.        (insert "(declare (macros t))\n")
  102.        (write-region (point-min) (point-max) ledit-compile-file)
  103.        (erase-buffer)))
  104.   (suspend-emacs ledit-go-to-liszt-string)
  105.   (load ledit-read-file t t))
  106.  
  107. (defun ledit-setup ()
  108.   "Set up key bindings for the Lisp / Emacs interface"
  109.   (if (not ledit-mode-map)
  110.       (progn (setq ledit-mode-map (make-sparse-keymap))
  111.          (lisp-mode-commands ledit-mode-map)))
  112.   (define-key ledit-mode-map "\e\^d" 'ledit-save-defun)
  113.   (define-key ledit-mode-map "\e\^r" 'ledit-save-region)
  114.   (define-key ledit-mode-map "\^xz" 'ledit-go-to-lisp)
  115.   (define-key ledit-mode-map "\e\^c" 'ledit-go-to-liszt))
  116.  
  117. (ledit-setup)
  118.  
  119. (defun ledit-mode ()
  120.   "Major mode for editing text and stuffing it to a Lisp job.
  121. Like Lisp mode, plus these special commands:
  122.   M-C-d    -- record defun at or after point
  123.        for later transmission to Lisp job.
  124.   M-C-r -- record region for later transmission to Lisp job.
  125.   C-x z -- transfer to Lisp job and transmit saved text.
  126.   M-C-c -- transfer to Liszt (Lisp compiler) job
  127.        and transmit saved text.
  128. \\{ledit-mode-map}
  129. To make Lisp mode automatically change to Ledit mode,
  130. do (setq lisp-mode-hook 'ledit-from-lisp-mode)"
  131.   (interactive)
  132.   (lisp-mode)
  133.   (ledit-from-lisp-mode))
  134.  
  135. (defun ledit-from-lisp-mode ()
  136.   (use-local-map ledit-mode-map)
  137.   (setq mode-name "Ledit")
  138.   (setq major-mode 'ledit-mode)
  139.   (run-hooks 'ledit-mode-hook))
  140.