X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/d501f51645d966e8fe2febba698779996b33eb21..b0c9a334c2f0eb881eff47f590997e746cc3bdb3:/lisp/vmsproc.el diff --git a/lisp/vmsproc.el b/lisp/vmsproc.el index efd1482e1c..aa96560ee4 100644 --- a/lisp/vmsproc.el +++ b/lisp/vmsproc.el @@ -1,12 +1,16 @@ -;; vmsproc.el --- run asynchronous VMS subprocesses under Emacs +;;; vmsproc.el --- run asynchronous VMS subprocesses under Emacs -;; Copyright (C) 1986 Free Software Foundation, Inc. +;; Copyright (C) 1986, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +;; Author: Mukesh Prasad +;; Maintainer: FSF +;; Keywords: vms ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 1, or (at your option) +;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; GNU Emacs is distributed in the hope that it will be useful, @@ -15,36 +19,36 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to -;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: -;; Written by Mukesh Prasad. +;;; Code: (defvar display-subprocess-window nil - "If non-nil, the suprocess window is displayed whenever input is received.") + "If non-nil, the subprocess window is displayed whenever input is received.") (defvar command-prefix-string "$ " "String to insert to distinguish commands entered by user.") (defvar subprocess-running nil) -(defvar command-mode-map nil) +(defvar subprocess-buf nil) -(if command-mode-map - nil - (setq command-mode-map (make-sparse-keymap)) - (define-key command-mode-map "\C-m" 'command-send-input) - (define-key command-mode-map "\C-u" 'command-kill-line)) +(defvar command-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-m" 'command-send-input) + (define-key map "\C-u" 'command-kill-line) + map)) (defun subprocess-input (name str) "Handles input from a subprocess. Called by Emacs." (if display-subprocess-window (display-buffer subprocess-buf)) - (let ((old-buffer (current-buffer))) - (set-buffer subprocess-buf) + (with-current-buffer subprocess-buf (goto-char (point-max)) - (insert str) - (insert ?\n) - (set-buffer old-buffer))) + (insert str ?\n))) (defun subprocess-exit (name) "Called by Emacs upon subprocess exit." @@ -58,8 +62,7 @@ the end." (if subprocess-running (return t)) (setq subprocess-buf (get-buffer-create "*COMMAND*")) - (save-excursion - (set-buffer subprocess-buf) + (with-current-buffer subprocess-buf (use-local-map command-mode-map)) (setq subprocess-running (spawn-subprocess 1 'subprocess-input 'subprocess-exit)) @@ -74,25 +77,24 @@ the end." (setq cmd (substring command 0 (string-match " " command))) (setq args (substring command (string-match " " command))) (call-process cmd nil buffer nil "*dcl*" args))) -;BUGS: only the output up to the end of the first image activation is trapped. -; (if (not subprocess-running) -; (start-subprocess)) -; (save-excursion -; (set-buffer buffer) -; (let ((output-filename (concat "SYS$SCRATCH:OUTPUT-FOR-" -; (getenv "USER") ".LISTING"))) -; (while (file-exists-p output-filename) -; (delete-file output-filename)) -; (define-logical-name "SYS$OUTPUT" (concat output-filename "-NEW")) -; (send-command-to-subprocess 1 command) -; (send-command-to-subprocess 1 (concat -; "RENAME " output-filename -; "-NEW " output-filename)) -; (while (not (file-exists-p output-filename)) -; (sleep-for 1)) -; (define-logical-name "SYS$OUTPUT" nil) -; (insert-file output-filename) -; (delete-file output-filename)))) + ;; BUGS: only the output up to the end of the first image activation is trapped. + ;; (if (not subprocess-running) + ;; (start-subprocess)) + ;; (with-current-buffer buffer + ;; (let ((output-filename (concat "SYS$SCRATCH:OUTPUT-FOR-" + ;; (getenv "USER") ".LISTING"))) + ;; (while (file-exists-p output-filename) + ;; (delete-file output-filename)) + ;; (define-logical-name "SYS$OUTPUT" (concat output-filename "-NEW")) + ;; (send-command-to-subprocess 1 command) + ;; (send-command-to-subprocess 1 (concat + ;; "RENAME " output-filename + ;; "-NEW " output-filename)) + ;; (while (not (file-exists-p output-filename)) + ;; (sleep-for 1)) + ;; (define-logical-name "SYS$OUTPUT" nil) + ;; (insert-file output-filename) + ;; (delete-file output-filename)))) (defun subprocess-command () "Starts asynchronous subprocess if not running and switches to its window." @@ -108,8 +110,7 @@ the spawned subprocess. Otherwise brings back current line to the last line for resubmission." (interactive) (beginning-of-line) - (let ((current-line (buffer-substring (point) - (progn (end-of-line) (point))))) + (let ((current-line (buffer-substring (point) (line-end-position)))) (if (eobp) (progn (if (not subprocess-running) @@ -122,15 +123,16 @@ line to the last line for resubmission." (progn (beginning-of-line) (insert command-prefix-string))) (next-line 1)))) ;; else -- if not at last line in buffer - (end-of-buffer) + (goto-char (point-max)) (backward-char) (next-line 1) - (if (string-equal command-prefix-string - (substring current-line 0 (length command-prefix-string))) - (insert (substring current-line (length command-prefix-string))) - (insert current-line))))) + (insert + (if (compare-strings command-prefix-string nil nil + current-line 0 (length command-prefix-string)) + (substring current-line (length command-prefix-string)) + current-line))))) -(defun command-kill-line() +(defun command-kill-line () "Kills the current line. Used in command mode." (interactive) (beginning-of-line) @@ -138,4 +140,5 @@ line to the last line for resubmission." (define-key esc-map "$" 'subprocess-command) +;; arch-tag: 600b2512-f903-4887-bcd2-e76b306f5b66 ;;; vmsproc.el ends here