-;;; rcompile.el Run a compilation on a remote machine (requires emacs-19)
+;;; rcompile.el --- run a compilation on a remote machine
-;;; Copyright (C) 1993 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
-;;; Author: Albert <alon@milcse.rtsg.mot.com>
-;;; Created: 1993 Oct 6
-;;; Version: 1.0
-;;; Keywords: tools, processes
+;; Author: Albert <alon@milcse.rtsg.mot.com>
+;; Maintainer: FSF
+;; Created: 1993 Oct 6
+;; Keywords: tools, processes
;; This file is part of GNU Emacs.
;; 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., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
-;;; This package is for running a remote compilation and using emacs to parse
-;;; the error messages. It works by rsh'ing the compilation to a remote host
-;;; and parsing the output. If the file visited at the time remote-compile was
-;;; called was loaded remotely (ange-ftp), the host and user name are obtained
-;;; by the calling ange-ftp-ftp-name on the current directory. In this case the
-;;; next-error command will also ange-ftp the files over. This is achieved
-;;; automatically because the compilation-parse-errors function uses
-;;; default-directory to build it's file names. If however the file visited was
-;;; loaded locally, remote-compile prompts for a host and user and assumes the
-;;; files mounted locally (otherwise, how was the visited file loaded).
-
-;;; See the user defined variables section for more info.
-
-;;; I was contemplating redefining "compile" to "remote-compile" automatically
-;;; if the file visited was ange-ftp'ed but decided against it for now. If you
-;;; feel this is a good idea, let me know and I'll consider it again.
-
-;;; Installation:
-
-;;; To use rcompile, you also need to give yourself permission to connect to
-;;; the remote host. You do this by putting lines like:
-
-;;; monopoly alon
-;;; vme33
-;;;
-;;; in a file named .rhosts in the home directory (of the remote machine).
-;;; Be careful what you put in this file. A line like:
-;;;
-;;; +
-;;;
-;;; Will allow anyone access to your account without a password. I suggest you
-;;; read the rhosts(5) manual page before you edit this file (if you are not
-;;; familiar with it already)
-
-;;; History:
-;;; V1.1 Oct 13 1993 Alon Albert
-;;; SYSV support by Jay Finger <finger@mikey.convex.com>
-;;; V1.0 Oct 6 1993 Alon Albert
-;;; Initial cut.
-
+;; This package is for running a remote compilation and using emacs to parse
+;; the error messages. It works by rsh'ing the compilation to a remote host
+;; and parsing the output. If the file visited at the time remote-compile was
+;; called was loaded remotely (ange-ftp), the host and user name are obtained
+;; by the calling ange-ftp-ftp-name on the current directory. In this case the
+;; next-error command will also ange-ftp the files over. This is achieved
+;; automatically because the compilation-parse-errors function uses
+;; default-directory to build its file names. If however the file visited was
+;; loaded locally, remote-compile prompts for a host and user and assumes the
+;; files mounted locally (otherwise, how was the visited file loaded).
+
+;; See the user defined variables section for more info.
+
+;; I was contemplating redefining "compile" to "remote-compile" automatically
+;; if the file visited was ange-ftp'ed but decided against it for now. If you
+;; feel this is a good idea, let me know and I'll consider it again.
+
+;; Installation:
+
+;; To use rcompile, you also need to give yourself permission to connect to
+;; the remote host. You do this by putting lines like:
+
+;; monopoly alon
+;; vme33
+;;
+;; in a file named .rhosts in the home directory (of the remote machine).
+;; Be careful what you put in this file. A line like:
+;;
+;; +
+;;
+;; Will allow anyone access to your account without a password. I suggest you
+;; read the rhosts(5) manual page before you edit this file (if you are not
+;; familiar with it already)
\f
;;; Code:
;;;; user defined variables
-(defvar remote-compile-rsh-command
- (if (eq system-type 'usg-unix-v) "remsh" "rsh")
- "*Name of remote shell command: `rsh' for BSD or `remsh' for SYSV.")
+(defgroup remote-compile nil
+ "Run a compilation on a remote machine"
+ :group 'processes
+ :group 'tools)
+
-(defvar remote-compile-host nil
- "*Host for remote compilations.")
+(defcustom remote-compile-host nil
+ "*Host for remote compilations."
+ :type '(choice string (const nil))
+ :group 'remote-compile)
-(defvar remote-compile-user nil
+(defcustom remote-compile-user nil
"User for remote compilations.
-nil means use the value returned by \\[user-login-name].")
+nil means use the value returned by \\[user-login-name]."
+ :type '(choice string (const nil))
+ :group 'remote-compile)
-(defvar remote-compile-run-before nil
+(defcustom remote-compile-run-before nil
"*Command to run before compilation.
-This can be used for setting up enviroment variables,
+This can be used for setting up environment variables,
since rsh does not invoke the shell as a login shell and files like .login
\(tcsh\) and .bash_profile \(bash\) are not run.
-nil means run no commands.")
+nil means run no commands."
+ :type '(choice string (const nil))
+ :group 'remote-compile)
-(defvar remote-compile-prompt-for-host nil
- "*Non-nil means prompt for host if not available from filename.")
+(defcustom remote-compile-prompt-for-host nil
+ "*Non-nil means prompt for host if not available from filename."
+ :type 'boolean
+ :group 'remote-compile)
-(defvar remote-compile-prompt-for-user nil
- "*Non-nil means prompt for user if not available from filename.")
+(defcustom remote-compile-prompt-for-user nil
+ "*Non-nil means prompt for user if not available from filename."
+ :type 'boolean
+ :group 'remote-compile)
;;;; internal variables
(ange-ftp-ftp-name default-directory)))
(compile-command
(format "%s %s -l %s \"(%scd %s; %s)\""
- remote-compile-rsh-command
+ remote-shell-program
host
remote-compile-user
(if remote-compile-run-before
compile-command)))
(setq remote-compile-host host)
(save-some-buffers nil nil)
- (compile-internal compile-command "No more errors")))
+ (compile-internal compile-command "No more errors")
+ ;; Set comint-file-name-prefix in the compilation buffer so
+ ;; compilation-parse-errors will find referenced files by ange-ftp.
+ (save-excursion
+ (set-buffer compilation-last-buffer)
+ (make-variable-buffer-local 'comint-file-name-prefix)
+ (setq comint-file-name-prefix (concat "/" host ":")))))
;;; rcompile.el ends here