]> code.delx.au - gnu-emacs/blobdiff - lisp/rlogin.el
(chinese-year-cache): Change range of years from
[gnu-emacs] / lisp / rlogin.el
index dace9412e29cd90a94ce4dfe9692d2eef6d90ca0..04cea26cdfc8b812dd7ace46652c04668f1657ca 100644 (file)
@@ -1,11 +1,13 @@
 ;;; rlogin.el --- remote login interface
 
-;; Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
 
 ;; Author: Noah Friedman
 ;; Maintainer: Noah Friedman <friedman@prep.ai.mit.edu>
 ;; Keywords: unix, comm
 
+;; $Id: rlogin.el,v 1.41 1998/03/14 04:46:55 rms Exp $
+
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
@@ -23,8 +25,6 @@
 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 ;; Boston, MA 02111-1307, USA.
 
-;; $Id: rlogin.el,v 1.32 1996/05/08 00:52:30 friedman Exp rms $
-
 ;;; Commentary:
 
 ;; Support for remote logins using `rlogin'.
 (require 'comint)
 (require 'shell)
 
-(defvar rlogin-program "rlogin"
-  "*Name of program to invoke rlogin")
-
-(defvar rlogin-explicit-args nil
-  "*List of arguments to pass to rlogin on the command line.")
-
-(defvar rlogin-mode-hook nil
-  "*Hooks to run after setting current buffer to rlogin-mode.")
-
-(defvar rlogin-process-connection-type nil
+(defgroup rlogin nil
+  "Remote login interface"
+  :group 'processes
+  :group 'unix)
+
+
+(defcustom rlogin-program "rlogin"
+  "*Name of program to invoke rlogin"
+  :type 'string
+  :group 'rlogin)
+
+(defcustom rlogin-explicit-args nil
+  "*List of arguments to pass to rlogin on the command line."
+  :type '(repeat (string :tag "Argument"))
+  :group 'rlogin)
+
+(defcustom rlogin-mode-hook nil
+  "*Hooks to run after setting current buffer to rlogin-mode."
+  :type 'hook
+  :group 'rlogin)
+
+(defcustom rlogin-process-connection-type
+  (save-match-data
+    ;; Solaris 2.x `rlogin' will spew a bunch of ioctl error messages if
+    ;; stdin isn't a tty.
+    (cond ((and (boundp 'system-configuration)
+                (stringp system-configuration)
+                (string-match "-solaris2" system-configuration))
+           t)
+          (t nil)))
   "*If non-`nil', use a pty for the local rlogin process.
 If `nil', use a pipe (if pipes are supported on the local system).
 
 Generally it is better not to waste ptys on systems which have a static
 number of them.  On the other hand, some implementations of `rlogin' assume
-a pty is being used, and errors will result from using a pipe instead.")
+a pty is being used, and errors will result from using a pipe instead."
+  :type '(choice (const :tag "pipes" nil)
+                (other :tag "ptys" t))
+  :group 'rlogin)
 
-(defvar rlogin-directory-tracking-mode 'local
+(defcustom rlogin-directory-tracking-mode 'local
   "*Control whether and how to do directory tracking in an rlogin buffer.
 
 nil means don't do directory tracking.
@@ -75,18 +98,26 @@ This variable becomes local to a buffer when set in any fashion for it.
 It is better to use the function of the same name to change the behavior of
 directory tracking in an rlogin session once it has begun, rather than
 simply setting this variable, since the function does the necessary
-re-synching of directories.")
+re-synching of directories."
+  :type '(choice (const :tag "off" nil)
+                (const :tag "ftp" t)
+                (other :tag "local" local))
+  :group 'rlogin)
 
 (make-variable-buffer-local 'rlogin-directory-tracking-mode)
 
-(defvar rlogin-host nil
-  "*The name of the remote host.  This variable is buffer-local.")
+(defcustom rlogin-host nil
+  "*The name of the remote host.  This variable is buffer-local."
+  :type '(choice (const nil) string)
+  :group 'rlogin)
 
-(defvar rlogin-remote-user nil
+(defcustom rlogin-remote-user nil
   "*The username used on the remote host.
 This variable is buffer-local and defaults to your local user name.
 If rlogin is invoked with the `-l' option to specify the remote username,
-this variable is set from that.")
+this variable is set from that."
+  :type '(choice (const nil) string)
+  :group 'rlogin)
 
 ;; Initialize rlogin mode map.
 (defvar rlogin-mode-map '())
@@ -187,6 +218,11 @@ variable."
       ;; comint-output-filter-functions is just like a hook, except that the
       ;; functions in that list are passed arguments.  add-hook serves well
       ;; enough for modifying it.
+      ;; comint-output-filter-functions should already have a
+      ;; permanent-local property, at least in emacs 19.27 or later.
+      (if (fboundp 'make-local-hook)
+          (make-local-hook 'comint-output-filter-functions)
+        (make-local-variable 'comint-output-filter-functions))
       (add-hook 'comint-output-filter-functions 'rlogin-carriage-filter)
 
       (rlogin-mode)
@@ -196,17 +232,20 @@ variable."
       (make-local-variable 'rlogin-remote-user)
       (setq rlogin-remote-user user)
 
-      (cond
-       ((eq rlogin-directory-tracking-mode t)
-        ;; Do this here, rather than calling the tracking mode function, to
-        ;; avoid a gratuitous resync check; the default should be the
-        ;; user's home directory, be it local or remote.
-        (setq comint-file-name-prefix
-              (concat "/" rlogin-remote-user "@" rlogin-host ":"))
-        (cd-absolute comint-file-name-prefix))
-       ((null rlogin-directory-tracking-mode))
-       (t
-        (cd-absolute (concat comint-file-name-prefix "~/"))))))))
+      (condition-case ()
+          (cond ((eq rlogin-directory-tracking-mode t)
+                 ;; Do this here, rather than calling the tracking mode
+                 ;; function, to avoid a gratuitous resync check; the default
+                 ;; should be the user's home directory, be it local or remote.
+                 (setq comint-file-name-prefix
+                       (concat "/" rlogin-remote-user "@" rlogin-host ":"))
+                 (cd-absolute comint-file-name-prefix))
+                ((null rlogin-directory-tracking-mode))
+                (t
+                 (cd-absolute (concat comint-file-name-prefix "~/"))))
+        (error nil))))))
+
+(put 'rlogin-mode 'mode-class 'special)
 
 (defun rlogin-mode ()
   "Set major-mode for rlogin sessions.
@@ -281,7 +320,7 @@ local one share the same directories (through NFS)."
       (setq list (cons (substring line (match-beginning 0) (match-end 0))
                        list))
       (setq posn (match-end 0)))
-    (store-match-data (match-data))
+    (set-match-data (match-data))
     (nreverse list)))
 
 (defun rlogin-carriage-filter (string)
@@ -326,4 +365,6 @@ Delete ARG characters forward, or send a C-d to process if at end of buffer."
       (comint-dynamic-complete)
     (insert "\C-i")))
 
+(provide 'rlogin)
+
 ;;; rlogin.el ends here