;;; newlisp.el --- newLISP mode for Emacs ;;; ;;; copied from: http://paste.lisp.org/display/72178 (require 'lisp-mode) (defvar *newlisp-command* "newlisp") (defvar *newlisp-process-coding-system* '(utf-8 . utf-8)) (defun newlisp-process () (let ((default-process-coding-system *newlisp-process-coding-system*)) (get-buffer-process (make-comint "newlisp" *newlisp-command* nil "-C")))) (defun newlisp-show-repl (&optional no-focus) (interactive "P") (let ((obuf (current-buffer))) (pop-to-buffer (process-buffer (newlisp-process))) (if no-focus (pop-to-buffer obuf)))) (defun newlisp-eval (str-sexp) (interactive "snewLISP eval: ") (let ((proc (newlisp-process))) (labels ((sendln (str) (comint-send-string proc (concat str "\n")))) (sendln "[cmd]") (sendln str-sexp) (sendln "[/cmd]")) (newlisp-show-repl t))) (defun newlisp-eval-region (from to) (interactive "r") (newlisp-eval (buffer-substring-no-properties from to))) (defun newlisp-eval-last-sexp () (interactive) (let ((opoint (point))) (with-syntax-table lisp-mode-syntax-table (newlisp-eval-region (progn (backward-sexp) (point)) (progn (forward-sexp) (point)))) (if (< (point) opoint) (goto-char opoint)))) (defun newlisp-eval-buffer (arg) (interactive "P") (setq arg (if arg (read-string "newLISP args: ") "")) (shell-command (format "%s \"%s\" %s" *newlisp-command* (buffer-file-name) arg) "*newLISP output*")) (defun newlisp-kill-process () (interactive) (newlisp-eval "(exit)")) (defmacro defindent (operator indentation) `(put ',operator 'lisp-indent-function ',indentation)) (defindent define 1) (defindent fn 1) (defindent begin 0) (defindent local 1) (defindent letex 1) (defindent for 1) (defindent lambda-macro 1) (defindent define-macro 1) (defindent until 1) (defindent letn 1) ;; ... ;; (global-set-key "\C-c\C-x" 'newlisp-eval-last-sexp) ; C-c C-x (provide 'newlisp) ;; newlisp.el ends here