1;;; medit.el --- front-end to the MEDIT package for editing MDL 2 3;; Copyright (C) 1985 Free Software Foundation, Inc. 4 5;; Author: K. Shane Hartman 6;; Maintainer: FSF 7;; Keywords: languages 8 9;; This file is part of GNU Emacs. 10 11;; GNU Emacs is free software; you can redistribute it and/or modify 12;; it under the terms of the GNU General Public License as published by 13;; the Free Software Foundation; either version 2, or (at your option) 14;; any later version. 15 16;; GNU Emacs is distributed in the hope that it will be useful, 17;; but WITHOUT ANY WARRANTY; without even the implied warranty of 18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19;; GNU General Public License for more details. 20 21;; You should have received a copy of the GNU General Public License 22;; along with GNU Emacs; see the file COPYING. If not, write to 23;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 24 25;;; Commentary: 26 27;; >> This package depends on two MDL packages: MEDIT and FORKS which 28;; >> can be obtained from the public (network) library at mit-ajax. 29 30;;; Code: 31 32(require 'mim-mode) 33 34(defconst medit-zap-file (concat "/tmp/" (user-login-name) ".medit.mud") 35 "File name for data sent to MDL by Medit.") 36(defconst medit-buffer "*MEDIT*" 37 "Name of buffer in which Medit accumulates data to send to MDL.") 38(defconst medit-save-files t 39 "If non-nil, Medit offers to save files on return to MDL.") 40 41(defun medit-save-define () 42 "Mark the previous or surrounding toplevel object to be sent back to MDL." 43 (interactive) 44 (save-excursion 45 (beginning-of-DEFINE) 46 (let ((start (point))) 47 (forward-mim-object 1) 48 (append-to-buffer medit-buffer start (point)) 49 (goto-char start) 50 (message (buffer-substring start (progn (end-of-line) (point))))))) 51 52(defun medit-save-region (start end) 53 "Mark the current region to be sent to back to MDL." 54 (interactive "r") 55 (append-to-buffer medit-buffer start end) 56 (message "Current region saved for MDL.")) 57 58(defun medit-save-buffer () 59 "Mark the current buffer to be sent back to MDL." 60 (interactive) 61 (append-to-buffer medit-buffer (point-min) (point-max)) 62 (message "Current buffer saved for MDL.")) 63 64(defun medit-zap-define-to-mdl () 65 "Return to MDL with surrounding or previous toplevel MDL object." 66 (interactive) 67 (medit-save-define) 68 (medit-goto-mdl)) 69 70(defun medit-zap-region-mdl (start end) 71 "Return to MDL with current region." 72 (interactive) 73 (medit-save-region start end) 74 (medit-goto-mdl)) 75 76(defun medit-zap-buffer () 77 "Return to MDL with current buffer." 78 (interactive) 79 (medit-save-buffer) 80 (medit-goto-mdl)) 81 82(defun medit-goto-mdl () 83 "Return from Emacs to superior MDL, sending saved code. 84Optionally, offers to save changed files." 85 (interactive) 86 (let ((buffer (get-buffer medit-buffer))) 87 (if buffer 88 (save-excursion 89 (set-buffer buffer) 90 (if (buffer-modified-p buffer) 91 (write-region (point-min) (point-max) medit-zap-file)) 92 (set-buffer-modified-p nil) 93 (erase-buffer))) 94 (if medit-save-files (save-some-buffers)) 95 ;; Note could handle parallel fork by giving argument "%xmdl". Then 96 ;; mdl would have to invoke with "%emacs". 97 (suspend-emacs))) 98 99(defconst medit-mode-map nil) 100(if (not medit-mode-map) 101 (progn 102 (setq medit-mode-map (copy-keymap mim-mode-map)) 103 (define-key medit-mode-map "\e\z" 'medit-save-define) 104 (define-key medit-mode-map "\e\^z" 'medit-save-buffer) 105 (define-key medit-mode-map "\^xz" 'medit-goto-mdl) 106 (define-key medit-mode-map "\^xs" 'medit-zap-buffer))) 107 108(defconst medit-mode-hook (and (boundp 'mim-mode-hook) mim-mode-hook) "") 109(setq mim-mode-hook '(lambda () (medit-mode))) 110 111(defun medit-mode (&optional state) 112 "Major mode for editing text and returning it to a superior MDL. 113Like Mim mode, plus these special commands: 114\\{medit-mode-map}" 115 (interactive) 116 (use-local-map medit-mode-map) 117 (run-hooks 'medit-mode-hook) 118 (setq major-mode 'medit-mode) 119 (setq mode-name "Medit")) 120 121(mim-mode) 122 123;;; medit.el ends here 124