1;;; ledit.el --- Emacs side of ledit interface 2 3;; Copyright (C) 1985 Free Software Foundation, Inc. 4 5;; Maintainer: FSF 6;; Keyord: languages 7 8;; This file is part of GNU Emacs. 9 10;; GNU Emacs is free software; you can redistribute it and/or modify 11;; it under the terms of the GNU General Public License as published by 12;; the Free Software Foundation; either version 2, or (at your option) 13;; any later version. 14 15;; GNU Emacs is distributed in the hope that it will be useful, 16;; but WITHOUT ANY WARRANTY; without even the implied warranty of 17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18;; GNU General Public License for more details. 19 20;; You should have received a copy of the GNU General Public License 21;; along with GNU Emacs; see the file COPYING. If not, write to 22;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 23 24;;; Commentary: 25 26;; This is a major mode for editing Liszt. See etc/LEDIT for details. 27 28;;; Code: 29 30;;; To do: 31;;; o lisp -> emacs side of things (grind-definition and find-definition) 32 33(defvar ledit-mode-map nil) 34 35(defconst ledit-zap-file (concat "/tmp/" (user-login-name) ".l1") 36 "File name for data sent to Lisp by Ledit.") 37(defconst ledit-read-file (concat "/tmp/" (user-login-name) ".l2") 38 "File name for data sent to Ledit by Lisp.") 39(defconst ledit-compile-file 40 (concat "/tmp/" (user-login-name) ".l4") 41 "File name for data sent to Lisp compiler by Ledit.") 42(defconst ledit-buffer "*LEDIT*" 43 "Name of buffer in which Ledit accumulates data to send to Lisp.") 44 45;;;###autoload 46(defconst ledit-save-files t "\ 47*Non-nil means Ledit should save files before transferring to Lisp.") 48;;;###autoload 49(defconst ledit-go-to-lisp-string "%?lisp" "\ 50*Shell commands to execute to resume Lisp job.") 51;;;###autoload 52(defconst ledit-go-to-liszt-string "%?liszt" "\ 53*Shell commands to execute to resume Lisp compiler job.") 54 55(defun ledit-save-defun () 56 "Save the current defun in the ledit buffer" 57 (interactive) 58 (save-excursion 59 (end-of-defun) 60 (let ((end (point))) 61 (beginning-of-defun) 62 (append-to-buffer ledit-buffer (point) end)) 63 (message "Current defun saved for Lisp"))) 64 65(defun ledit-save-region (beg end) 66 "Save the current region in the ledit buffer" 67 (interactive "r") 68 (append-to-buffer ledit-buffer beg end) 69 (message "Region saved for Lisp")) 70 71(defun ledit-zap-defun-to-lisp () 72 "Carry the current defun to Lisp." 73 (interactive) 74 (ledit-save-defun) 75 (ledit-go-to-lisp)) 76 77(defun ledit-zap-defun-to-liszt () 78 "Carry the current defun to liszt." 79 (interactive) 80 (ledit-save-defun) 81 (ledit-go-to-liszt)) 82 83(defun ledit-zap-region-to-lisp (beg end) 84 "Carry the current region to Lisp." 85 (interactive "r") 86 (ledit-save-region beg end) 87 (ledit-go-to-lisp)) 88 89(defun ledit-go-to-lisp () 90 "Suspend Emacs and restart a waiting Lisp job." 91 (interactive) 92 (if ledit-save-files 93 (save-some-buffers)) 94 (if (get-buffer ledit-buffer) 95 (save-excursion 96 (set-buffer ledit-buffer) 97 (goto-char (point-min)) 98 (write-region (point-min) (point-max) ledit-zap-file) 99 (erase-buffer))) 100 (suspend-emacs ledit-go-to-lisp-string) 101 (load ledit-read-file t t)) 102 103(defun ledit-go-to-liszt () 104 "Suspend Emacs and restart a waiting Liszt job." 105 (interactive) 106 (if ledit-save-files 107 (save-some-buffers)) 108 (if (get-buffer ledit-buffer) 109 (save-excursion 110 (set-buffer ledit-buffer) 111 (goto-char (point-min)) 112 (insert "(declare (macros t))\n") 113 (write-region (point-min) (point-max) ledit-compile-file) 114 (erase-buffer))) 115 (suspend-emacs ledit-go-to-liszt-string) 116 (load ledit-read-file t t)) 117 118(defun ledit-setup () 119 "Set up key bindings for the Lisp/Emacs interface." 120 (if (not ledit-mode-map) 121 (progn (setq ledit-mode-map (nconc (make-sparse-keymap) 122 shared-lisp-mode-map)))) 123 (define-key ledit-mode-map "\e\^d" 'ledit-save-defun) 124 (define-key ledit-mode-map "\e\^r" 'ledit-save-region) 125 (define-key ledit-mode-map "\^xz" 'ledit-go-to-lisp) 126 (define-key ledit-mode-map "\e\^c" 'ledit-go-to-liszt)) 127 128(ledit-setup) 129 130;;;###autoload 131(defun ledit-mode () 132 "\\<ledit-mode-map>Major mode for editing text and stuffing it to a Lisp job. 133Like Lisp mode, plus these special commands: 134 \\[ledit-save-defun] -- record defun at or after point 135 for later transmission to Lisp job. 136 \\[ledit-save-region] -- record region for later transmission to Lisp job. 137 \\[ledit-go-to-lisp] -- transfer to Lisp job and transmit saved text. 138 \\[ledit-go-to-liszt] -- transfer to Liszt (Lisp compiler) job 139 and transmit saved text. 140\\{ledit-mode-map} 141To make Lisp mode automatically change to Ledit mode, 142do (setq lisp-mode-hook 'ledit-from-lisp-mode)" 143 (interactive) 144 (lisp-mode) 145 (ledit-from-lisp-mode)) 146 147;;;###autoload 148(defun ledit-from-lisp-mode () 149 (use-local-map ledit-mode-map) 150 (setq mode-name "Ledit") 151 (setq major-mode 'ledit-mode) 152 (run-hooks 'ledit-mode-hook)) 153 154;;; ledit.el ends here 155