1;;; ledit.el --- Emacs side of ledit interface 2 3;; Copyright (C) 1985, 2001, 2002, 2003, 2004, 2005, 4;; 2006, 2007 Free Software Foundation, Inc. 5 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 the 23;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 24;; Boston, MA 02110-1301, USA. 25 26;;; Commentary: 27 28;; This is a major mode for editing Liszt. See etc/LEDIT for details. 29 30;;; Code: 31 32;;; To do: 33;;; o lisp -> emacs side of things (grind-definition and find-definition) 34 35(defvar ledit-mode-map nil) 36 37(defconst ledit-zap-file 38 (expand-file-name (concat (user-login-name) ".l1") temporary-file-directory) 39 "File name for data sent to Lisp by Ledit.") 40(defconst ledit-read-file 41 (expand-file-name (concat (user-login-name) ".l2") temporary-file-directory) 42 "File name for data sent to Ledit by Lisp.") 43(defconst ledit-compile-file 44 (expand-file-name (concat (user-login-name) ".l4") temporary-file-directory) 45 "File name for data sent to Lisp compiler by Ledit.") 46(defconst ledit-buffer "*LEDIT*" 47 "Name of buffer in which Ledit accumulates data to send to Lisp.") 48 49;;;###autoload 50(defconst ledit-save-files t "\ 51*Non-nil means Ledit should save files before transferring to Lisp.") 52;;;###autoload 53(defconst ledit-go-to-lisp-string "%?lisp" "\ 54*Shell commands to execute to resume Lisp job.") 55;;;###autoload 56(defconst ledit-go-to-liszt-string "%?liszt" "\ 57*Shell commands to execute to resume Lisp compiler job.") 58 59(defun ledit-save-defun () 60 "Save the current defun in the ledit buffer." 61 (interactive) 62 (save-excursion 63 (end-of-defun) 64 (let ((end (point))) 65 (beginning-of-defun) 66 (append-to-buffer ledit-buffer (point) end)) 67 (message "Current defun saved for Lisp"))) 68 69(defun ledit-save-region (beg end) 70 "Save the current region in the ledit buffer" 71 (interactive "r") 72 (append-to-buffer ledit-buffer beg end) 73 (message "Region saved for Lisp")) 74 75(defun ledit-zap-defun-to-lisp () 76 "Carry the current defun to Lisp." 77 (interactive) 78 (ledit-save-defun) 79 (ledit-go-to-lisp)) 80 81(defun ledit-zap-defun-to-liszt () 82 "Carry the current defun to liszt." 83 (interactive) 84 (ledit-save-defun) 85 (ledit-go-to-liszt)) 86 87(defun ledit-zap-region-to-lisp (beg end) 88 "Carry the current region to Lisp." 89 (interactive "r") 90 (ledit-save-region beg end) 91 (ledit-go-to-lisp)) 92 93(defun ledit-go-to-lisp () 94 "Suspend Emacs and restart a waiting Lisp job." 95 (interactive) 96 (if ledit-save-files 97 (save-some-buffers)) 98 (if (get-buffer ledit-buffer) 99 (save-excursion 100 (set-buffer ledit-buffer) 101 (goto-char (point-min)) 102 (write-region (point-min) (point-max) ledit-zap-file) 103 (erase-buffer))) 104 (suspend-emacs ledit-go-to-lisp-string) 105 (load ledit-read-file t t)) 106 107(defun ledit-go-to-liszt () 108 "Suspend Emacs and restart a waiting Liszt job." 109 (interactive) 110 (if ledit-save-files 111 (save-some-buffers)) 112 (if (get-buffer ledit-buffer) 113 (save-excursion 114 (set-buffer ledit-buffer) 115 (goto-char (point-min)) 116 (insert "(declare (macros t))\n") 117 (write-region (point-min) (point-max) ledit-compile-file) 118 (erase-buffer))) 119 (suspend-emacs ledit-go-to-liszt-string) 120 (load ledit-read-file t t)) 121 122(defun ledit-setup () 123 "Set up key bindings for the Lisp/Emacs interface." 124 (unless ledit-mode-map 125 (setq ledit-mode-map (make-sparse-keymap)) 126 (set-keymap-parent ledit-mode-map lisp-mode-shared-map)) 127 (define-key ledit-mode-map "\e\^d" 'ledit-save-defun) 128 (define-key ledit-mode-map "\e\^r" 'ledit-save-region) 129 (define-key ledit-mode-map "\^xz" 'ledit-go-to-lisp) 130 (define-key ledit-mode-map "\e\^c" 'ledit-go-to-liszt)) 131 132(ledit-setup) 133 134;;;###autoload 135(defun ledit-mode () 136 "\\<ledit-mode-map>Major mode for editing text and stuffing it to a Lisp job. 137Like Lisp mode, plus these special commands: 138 \\[ledit-save-defun] -- record defun at or after point 139 for later transmission to Lisp job. 140 \\[ledit-save-region] -- record region for later transmission to Lisp job. 141 \\[ledit-go-to-lisp] -- transfer to Lisp job and transmit saved text. 142 \\[ledit-go-to-liszt] -- transfer to Liszt (Lisp compiler) job 143 and transmit saved text. 144 145\\{ledit-mode-map} 146To make Lisp mode automatically change to Ledit mode, 147do (setq lisp-mode-hook 'ledit-from-lisp-mode)" 148 (interactive) 149 (delay-mode-hooks (lisp-mode)) 150 (ledit-from-lisp-mode)) 151 152;;;###autoload 153(defun ledit-from-lisp-mode () 154 (use-local-map ledit-mode-map) 155 (setq mode-name "Ledit") 156 (setq major-mode 'ledit-mode) 157 (run-mode-hooks 'ledit-mode-hook)) 158 159(provide 'ledit) 160 161;;; arch-tag: f0f1ca13-8d31-478c-ae1b-b448c55a8faf 162;;; ledit.el ends here 163