1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
;;; -*- Mode: Emacs-Lisp -*-
;;; ilisp-cmt.el --
;;; This file is part of ILISP.
;;; Version: 5.8
;;;
;;; Copyright (C) 1990, 1991, 1992, 1993 Chris McConnell
;;; 1993, 1994 Ivan Vasquez
;;; 1994, 1995, 1996 Marco Antoniotti and Rick Busdiecker
;;; 1996 Marco Antoniotti and Rick Campbell
;;;
;;; Other authors' names for which this Copyright notice also holds
;;; may appear later in this file.
;;;
;;; Send mail to 'ilisp-request@naggum.no' to be included in the
;;; ILISP mailing list. 'ilisp@naggum.no' 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 comint interface code.
;;;
;;;
;;;%Process interface
;;;%%Comint
(defun ilisp-get-old-input ()
"Snarf the sexp starting at the nearest previous prompt, or NIL if none."
(save-excursion
(let* ((begin (lisp-defun-begin))
(pmark (process-mark (get-buffer-process (current-buffer))))
(once (if (< (point) pmark)
(save-excursion (end-of-line) (point))))
(end nil)
(done nil))
(condition-case ()
(while (and (not done) (< (point) (point-max)))
(forward-sexp)
(setq end (point))
(skip-chars-forward " \t\n")
(if (and once (>= (point) once)) (setq done t)))
(error (setq end nil)))
(if end (buffer-substring begin end)))))
;;;
(defun ilisp-input-filter (str)
"Don't save anything matching ilisp-filter-regexp or less than
ilisp-filter-length long."
(and (not (string-match ilisp-filter-regexp str))
(> (length str) ilisp-filter-length)))
;;;
(defun ilisp-error-filter (output)
"Keep from OUTPUT only what matches ilisp-error-regexp or everything
if there is no match."
(if (string-match (ilisp-value 'ilisp-error-regexp) output)
(substring output (match-beginning 0) (match-end 0))
output))
(defun newline-and-indent-lisp ()
"If at the end of the buffer, send the string back to the process
mark with no newline. Otherwise, insert a newline, then indent. In
an ilisp buffer the region is narrowed first. See newline-and-indent
for more information."
(interactive "*")
(if ilisp-complete
(exit-minibuffer)
(let (input)
(if (and (= (point) (point-max))
(memq major-mode ilisp-modes)
(setq input (ilisp-get-old-input)))
(let ((process (ilisp-process))
(comint-send-newline (not comint-send-newline)))
(funcall comint-input-sender process input)
(set-marker (process-mark process) (point)))
(save-restriction
(if (memq major-mode ilisp-modes)
(narrow-to-region (save-excursion (lisp-input-start))
(point-max)))
(newline-and-indent))))))
|