]> code.delx.au - gnu-emacs/blobdiff - lisp/vmsproc.el
(normal-splash-screen, fancy-splash-screens-1): Add a reference to the Lisp
[gnu-emacs] / lisp / vmsproc.el
index 80f066c9a9247280614eecdf54be38a34e966b36..649d3a225347aa9b14e8bb02e9ff137ce09fc043 100644 (file)
@@ -1,12 +1,12 @@
 ;;; vmsproc.el --- run asynchronous VMS subprocesses under Emacs
 
+;; Copyright (C) 1986, 2002, 2003, 2004, 2005,
+;;   2006 Free Software Foundation, Inc.
+
 ;; Author: Mukesh Prasad
 ;; Maintainer: FSF
-;; Last-Modified: 29 Sep 1986
 ;; Keywords: vms
 
-;; Copyright (C) 1986 Free Software Foundation, Inc.
-
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; 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:
 
 ;;; 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."
@@ -63,8 +63,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))
@@ -79,25 +78,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."
@@ -113,8 +111,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)
@@ -127,15 +124,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)
@@ -143,4 +141,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