;;;###autoload (add-hook 'same-window-regexps "\\*telnet-.*\\*\\(\\|<[0-9]+>\\)")
;;;###autoload
-(defun telnet (host)
+(defun telnet (host &optional port)
"Open a network login connection to host named HOST (a string).
+Optional arg PORT specifies alternative port to connect to.
+Interactively, use \\[universal-argument] prefix to be prompted for port number.
+
Communication with HOST is recorded in a buffer `*PROGRAM-HOST*'
where PROGRAM is the telnet program being used. This program
is controlled by the contents of the global variable `telnet-host-properties',
falling back on the value of the global variable `telnet-program'.
Normally input is edited in Emacs and sent a line at a time."
- (interactive "sOpen connection to host: ")
+ (interactive (list (read-string "Open connection to host: ")
+ (cond
+ ((null current-prefix-arg) nil)
+ ((consp current-prefix-arg) (read-string "Port: "))
+ (t (prefix-numeric-value current-prefix-arg)))))
+ (if (and port (numberp port))
+ (setq port (int-to-string port)))
(let* ((comint-delimiter-argument-list '(?\ ?\t))
(properties (cdr (assoc host telnet-host-properties)))
(telnet-program (if properties (car properties) telnet-program))
- (name (concat telnet-program "-" (comint-arguments host 0 nil) ))
+ (hname (if port (concat host ":" port) host))
+ (name (concat telnet-program "-" (comint-arguments hname 0 nil) ))
(buffer (get-buffer (concat "*" name "*")))
(telnet-options (if (cdr properties) (cons "-l" (cdr properties))))
process)
;; Don't send the `open' cmd till telnet is ready for it.
(accept-process-output process)
(erase-buffer)
- (send-string process (concat "open " host "\n"))
+ (send-string process (concat "open " host
+ (if port " " "") (or port "")
+ "\n"))
(telnet-mode)
(setq comint-input-sender 'telnet-simple-send)
(setq telnet-count telnet-initial-count))))