;;; rlogin.el --- remote login interface
-;; Copyright (C) 1992-1995, 1997-1998, 2001-2011
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1992-1995, 1997-1998, 2001-2014 Free Software
+;; Foundation, Inc.
;; Author: Noah Friedman
;; Maintainer: Noah Friedman <friedman@splode.com>
;;; Code:
+;; FIXME?
+;; Maybe this file should be obsolete.
+;; http://lists.gnu.org/archive/html/emacs-devel/2013-02/msg00517.html
+;; It only adds rlogin-directory-tracking-mode. Is that useful?
+
(require 'comint)
(require 'shell)
:group 'processes
:group 'unix)
-(defcustom rlogin-program "rlogin"
- "Name of program to invoke rlogin"
+(defcustom rlogin-program "ssh"
+ "Name of program to invoke remote login."
+ :version "24.4" ; rlogin -> ssh
:type 'string
:group 'rlogin)
-(defcustom rlogin-explicit-args nil
- "List of arguments to pass to rlogin on the command line."
+(defcustom rlogin-explicit-args '("-t" "-t")
+ "List of arguments to pass to `rlogin-program' on the command line."
+ :version "24.4" ; nil -> -t -t
:type '(repeat (string :tag "Argument"))
:group 'rlogin)
: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)))
+ ;; Solaris 2.x `rlogin' will spew a bunch of ioctl error messages if
+ ;; stdin isn't a tty.
+ (and (string-match "rlogin" rlogin-program)
+ (string-match-p "-solaris2" system-configuration) t)
"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."
+ :set-after '(rlogin-program)
:type '(choice (const :tag "pipes" nil)
(other :tag "ptys" t))
:group 'rlogin)
(make-variable-buffer-local 'rlogin-directory-tracking-mode)
(defcustom rlogin-host nil
- "The name of the remote host. This variable is buffer-local."
+ "The name of the default remote host. This variable is buffer-local."
:type '(choice (const nil) string)
:group 'rlogin)
:type '(choice (const nil) string)
:group 'rlogin)
-;; Initialize rlogin mode map.
-(defvar rlogin-mode-map '())
-(cond
- ((null rlogin-mode-map)
- (setq rlogin-mode-map (if (consp shell-mode-map)
- (cons 'keymap shell-mode-map)
- (copy-keymap shell-mode-map)))
- (define-key rlogin-mode-map "\C-c\C-c" 'rlogin-send-Ctrl-C)
- (define-key rlogin-mode-map "\C-c\C-d" 'rlogin-send-Ctrl-D)
- (define-key rlogin-mode-map "\C-c\C-z" 'rlogin-send-Ctrl-Z)
- (define-key rlogin-mode-map "\C-c\C-\\" 'rlogin-send-Ctrl-backslash)
- (define-key rlogin-mode-map "\C-d" 'rlogin-delchar-or-send-Ctrl-D)
- (define-key rlogin-mode-map "\C-i" 'rlogin-tab-or-complete)))
+(defvar rlogin-mode-map
+ (let ((map (if (consp shell-mode-map)
+ (cons 'keymap shell-mode-map)
+ (copy-keymap shell-mode-map))))
+ (define-key map "\C-c\C-c" 'rlogin-send-Ctrl-C)
+ (define-key map "\C-c\C-d" 'rlogin-send-Ctrl-D)
+ (define-key map "\C-c\C-z" 'rlogin-send-Ctrl-Z)
+ (define-key map "\C-c\C-\\" 'rlogin-send-Ctrl-backslash)
+ (define-key map "\C-d" 'rlogin-delchar-or-send-Ctrl-D)
+ (define-key map "\C-i" 'rlogin-tab-or-complete)
+ map)
+ "Keymap for `rlogin-mode'.")
-\f
-;;;###autoload (add-hook 'same-window-regexps (purecopy "^\\*rlogin-.*\\*\\(\\|<[0-9]+>\\)"))
+\f
(defvar rlogin-history nil)
;;;###autoload
function `rlogin-directory-tracking-mode' rather than simply setting the
variable."
(interactive (list
- (read-from-minibuffer "rlogin arguments (hostname first): "
+ (read-from-minibuffer (format
+ "Arguments for `%s' (hostname first): "
+ (file-name-nondirectory rlogin-program))
nil nil nil 'rlogin-history)
current-prefix-arg))
-
(let* ((process-connection-type rlogin-process-connection-type)
(args (if rlogin-explicit-args
(append (split-string input-args)
(buffer-name (if (string= user (user-login-name))
(format "*rlogin-%s*" host)
(format "*rlogin-%s@%s*" user host))))
-
(cond ((null buffer))
((stringp buffer)
(setq buffer-name buffer))
(setq buffer-name (format "%s<%d>" buffer-name buffer)))
(t
(setq buffer-name (generate-new-buffer-name buffer-name))))
-
(setq buffer (get-buffer-create buffer-name))
- (pop-to-buffer buffer-name)
-
+ (switch-to-buffer buffer-name)
(unless (comint-check-proc buffer-name)
(comint-exec buffer buffer-name rlogin-program nil args)
-
(rlogin-mode)
-
(make-local-variable 'rlogin-host)
(setq rlogin-host host)
(make-local-variable 'rlogin-remote-user)
(setq rlogin-remote-user user)
-
- (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)))))
+ (ignore-errors
+ (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 "~/"))))))))
(put 'rlogin-mode 'mode-class 'special)
(process-send-string nil "\C-\\"))
(defun rlogin-delchar-or-send-Ctrl-D (arg)
- "\
-Delete ARG characters forward, or send a C-d to process if at end of buffer."
+ "Delete ARG characters forward, or send a C-d to process if at end of buffer."
(interactive "p")
(if (eobp)
(rlogin-send-Ctrl-D)
"Complete file name if doing directory tracking, or just insert TAB."
(interactive)
(if rlogin-directory-tracking-mode
- (comint-dynamic-complete)
+ (completion-at-point)
(insert "\C-i")))
(provide 'rlogin)