Mercurial > hg > xemacs-beta
diff lisp/ilisp/ilisp-xfr.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | b82b59fe008d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/ilisp/ilisp-xfr.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,148 @@ +;;; -*- Mode: Emacs-Lisp -*- + +;;; ilisp-xfr.el -- + +;;; This file is part of ILISP. +;;; Version: 5.7 +;;; +;;; Copyright (C) 1990, 1991, 1992, 1993 Chris McConnell +;;; 1993, 1994 Ivan Vasquez +;;; 1994, 1995 Marco Antoniotti and Rick Busdiecker +;;; +;;; Other authors' names for which this Copyright notice also holds +;;; may appear later in this file. +;;; +;;; Send mail to 'ilisp-request@lehman.com' to be included in the +;;; ILISP mailing list. 'ilisp@lehman.com' is the general ILISP +;;; mailing list were bugs and improvements are discussed. +;;; +;;; ILISP is freely redistributable under the terms found in the file +;;; COPYING. + + + +;;; +;;; ILISP transfer commands Lisp <-> Emacs +;;; + + +;; It's too bad that this function copies so much code from comint-send-input. +;; It ought to be a wrapper around it, instead. + +(defun return-ilisp () + "Grab the current expression with comint-get-old-input. If we have +a complete sexp, send it. Otherwise, indent appropriately." + (interactive) + (let ((proc (get-buffer-process (current-buffer)))) + (if (not proc) (error "Current buffer has no process") + (let* ((pmark (process-mark proc)) + (input (ilisp-get-old-input))) + (if input + (progn + (if (>= (point) pmark) + (goto-char (point-max)) + (goto-char pmark) + (insert input)) + (if (not ilisp-no-newline) (insert ?\n)) + (if (and (funcall comint-input-filter input) + (or (ring-empty-p (ilisp-get-input-ring)) + (not (string= (ring-ref (ilisp-get-input-ring) 0) + input)))) + (ilisp-ring-insert (ilisp-get-input-ring) input)) + (funcall comint-input-sentinel input) + ;; Ugh, comint changing under my feet.... + ;; Note: This used to be + ;; (eq ilisp-emacs-version-id 'gnu-19) + ;; 25/11/94 Marco Antoniotti + (if (eq +ilisp-emacs-version-id+ 'fsf-19) + (setq comint-input-ring-index nil)) + ;; Nuke symbol table + (setq ilisp-original nil) + (funcall comint-input-sender proc input) + (set-marker (process-mark proc) (point)) + (set-marker comint-last-input-end (point)) + (goto-char (point-max))) + (if (= pmark (point-max)) + (let ((comint-send-newline t)) + (if (not ilisp-no-newline) (insert ?\n)) + (set-marker (process-mark proc) (point)) + (funcall comint-input-sender proc "")) + (insert ?\n) + (save-restriction + (narrow-to-region pmark (point-max)) + (funcall indent-line-function)))))))) + +;;;%%Keyboard mode +(defun raw-keys-ilisp () + "Start using raw keyboard mode to send each character typed to the +inferior LISP until a key bound to interactive-keys-ilisp is +encountered. See also io-bridge-ilisp." + (interactive) + (if (not ilisp-raw-map) + (let ((map (make-keymap))) + (fillarray map 'ilisp-send-char) + (if (string-match "Lucid" emacs-version) + ;; not necessary, but friendlier. + (progn + (setq ilisp-completion-map (make-keymap)) +;; (set-keymap-name ilisp-completion-map 'ilisp-completion-map) +;; (set-keymap-parent ilisp-completion-map lisp-mode-map) + )) + (define-key map "\C-g" 'interactive-keys-ilisp) + (setq ilisp-raw-map map))) + (use-local-map ilisp-raw-map) + (message ilisp-raw-message)) + +;;; +(defun interactive-keys-ilisp () + "Go back to interactive keyboard interactions in the inferior LISP." + (interactive) + (use-local-map ilisp-use-map) + (message "Interactive keyboard mode")) + +;;; +(defun ilisp-send-char () + "Send the last typed character to the current inferior LISP echoing +if ilisp-raw-echo is T." + (interactive) + (if (ilisp-value 'ilisp-raw-echo t) + (progn + (goto-char (point-max)) + (insert last-input-char) + (set-marker (process-mark (ilisp-process)) (point)) + (set-marker comint-last-input-end (point)))) + (process-send-string (ilisp-process) + (make-string 1 last-input-char)) + (message ilisp-raw-message)) + +;;; +(defun ilisp-raw-handler (process output) + "Turn on raw keyboard mode." + (raw-keys-ilisp)) +(defun ilisp-interactive-handler (process output) + "Turn on interactive keyboard mode." + (interactive-keys-ilisp)) + +;;; +(defun io-bridge-ilisp () + "Set up so that the inferior LISP can turn on EMACS raw mode by +sending ^[1^] and turn it off by sending ^[0^]." + (interactive) + (require 'bridge) + (install-bridge) + (setq bridge-handlers (cons '("1" . ilisp-raw-handler) + (cons '("0" . ilisp-interactive-handler) + bridge-handlers)))) + +;;;%%Debugger interface +(defun delete-char-or-pop-ilisp (arg &optional killflag) + "Delete ARG characters, or pop break level if at end of buffer. +Optional second arg KILLFLAG non-nil means kill instead (save in kill ring). +Interactively, ARG is the prefix arg, and KILLFLAG is set if +ARG was explicitly specified." + (interactive "p") + (if (eobp) + (progn + (message "Pop LISP one level") + (comint-simple-send (ilisp-process) (ilisp-value 'comint-fix-error))) + (call-interactively 'delete-char (list arg killflag))))