]> git.eshelyaron.com Git - emacs.git/commitdiff
(telnet-filter): Rewrite, taken mostly from Lucid.
authorRichard M. Stallman <rms@gnu.org>
Thu, 23 Dec 1993 03:22:55 +0000 (03:22 +0000)
committerRichard M. Stallman <rms@gnu.org>
Thu, 23 Dec 1993 03:22:55 +0000 (03:22 +0000)
(telnet-prompt-pattern)
(telnet-check-software-type-initialize):
Don't let `telnet-prompt-pattern' match more than one line.

lisp/telnet.el

index e3f17187b35234009180d3915188b3cf95929366..871e1f182138bb2fe22424bf8dc106b4cd873328 100644 (file)
@@ -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)