summaryrefslogtreecommitdiff
path: root/lisp/telnet.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1993-12-23 03:22:55 +0000
committerRichard M. Stallman <rms@gnu.org>1993-12-23 03:22:55 +0000
commit5f781b64f917f9d83e42c7d453598dcb47476cf6 (patch)
tree361427ab6f57dbd08283633799cbb84e94b4f013 /lisp/telnet.el
parent0bb2be0f67d761d85f3cbdeb57970e01ba4f2bed (diff)
downloademacs-5f781b64f917f9d83e42c7d453598dcb47476cf6.tar.gz
(telnet-filter): Rewrite, taken mostly from Lucid.
(telnet-prompt-pattern) (telnet-check-software-type-initialize): Don't let `telnet-prompt-pattern' match more than one line.
Diffstat (limited to 'lisp/telnet.el')
-rw-r--r--lisp/telnet.el48
1 files changed, 25 insertions, 23 deletions
diff --git a/lisp/telnet.el b/lisp/telnet.el
index e3f17187b35..871e1f18213 100644
--- a/lisp/telnet.el
+++ b/lisp/telnet.el
@@ -51,7 +51,7 @@
(defvar telnet-new-line "\r")
(defvar telnet-mode-map nil)
-(defvar telnet-prompt-pattern "^[^#$%>]*[#$%>] *")
+(defvar telnet-prompt-pattern "^[^#$%>\n]*[#$%>] *")
(defvar telnet-replace-c-g nil)
(make-variable-buffer-local
(defvar telnet-remote-echoes t
@@ -115,7 +115,7 @@ rejecting one login and prompting for the again for a username and password.")
((string-match "tops-20" string) ;;maybe add telnet-replace-c-g
(setq telnet-prompt-pattern "[@>]*"))
((string-match "its" string)
- (setq telnet-prompt-pattern "^[^*>]*[*>] *"))
+ (setq telnet-prompt-pattern "^[^*>\n]*[*>] *"))
((string-match "explorer" string) ;;explorer telnet needs work
(setq telnet-replace-c-g ?\n))))
(setq comint-prompt-regexp telnet-prompt-pattern))
@@ -144,28 +144,30 @@ rejecting one login and prompting for the again for a username and password.")
(comint-send-string proc telnet-new-line))
(defun telnet-filter (proc string)
- (let ((at-end
- (and (eq (process-buffer proc) (current-buffer))
- (= (point) (point-max)))))
- (save-excursion
- (set-buffer (process-buffer proc))
+ (save-excursion
+ (set-buffer (process-buffer proc))
+ (let* ((last-insertion (marker-position (process-mark proc)))
+ (delta (- (point) last-insertion))
+ (ie (and comint-last-input-end
+ (marker-position comint-last-input-end)))
+ (w (get-buffer-window (current-buffer)))
+ (ws (and w (window-start w))))
+ (goto-char last-insertion)
+ (insert-before-markers string)
+ (set-marker (process-mark proc) (point))
+ (if ws (set-window-start w ws t))
+ (if ie (set-marker comint-last-input-end ie))
+ (while (progn (skip-chars-backward "^\C-m" last-insertion)
+ (> (point) last-insertion))
+ (delete-region (1- (point)) (point)))
(goto-char (process-mark proc))
- (let ((now (point)))
- ;; Insert STRING, omitting all C-m characters.
- (let ((index 0) c-m)
- (while (setq c-m (string-match "\C-m" string index))
- (insert-before-markers (substring string index c-m))
- (setq index (1+ c-m)))
- (insert-before-markers (substring string index)))
- (and telnet-replace-c-g
- (subst-char-in-region now (point) ?\C-g telnet-replace-c-g)))
-; (if (and (integer-or-marker-p last-input-start)
-; (marker-position last-input-start)
-; telnet-remote-echoes)
-; (delete-region last-input-start last-input-end))
- )
- (if at-end
- (goto-char (point-max)))))
+ (and telnet-replace-c-g
+ (subst-char-in-region last-insertion (point) ?\C-g
+ telnet-replace-c-g t))
+ ;; If point is after the insertion place, move it
+ ;; along with the text.
+ (if (> delta 0)
+ (goto-char (+ (process-mark proc) delta))))))
(defun telnet-send-input ()
(interactive)