changeset 38977:3037adea8353

(comint-next-prompt): Don't loop infinitely if {next,previous}-single-char-property-change returns its input position when the search fails.
author Miles Bader <miles@gnu.org>
date Mon, 27 Aug 2001 18:13:39 +0000
parents 96abf5ad6f42
children 2db4503e9503
files lisp/comint.el
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/comint.el	Mon Aug 27 18:12:46 2001 +0000
+++ b/lisp/comint.el	Mon Aug 27 18:13:39 2001 +0000
@@ -2140,14 +2140,21 @@
 	(comint-skip-prompt))
     ;; Use input fields
     (let ((pos (point))
-	  (input-pos nil))
+	  (input-pos nil)
+	  prev-pos)
       (while (/= n 0)
+	(setq prev-pos pos)
 	(setq pos
 	      (if (> n 0)
 		  (next-single-char-property-change pos 'field)
 		(previous-single-char-property-change pos 'field)))
-	(cond ((null pos)
+	(cond ((or (null pos) (= pos prev-pos))
 	       ;; Ran off the end of the buffer.
+	       (when (> n 0)
+		 ;; There's always an input field at the end of the
+		 ;; buffer, but it has a `field' property of nil.
+		 (setq input-pos (point-max)))
+	       ;; stop iterating
 	       (setq n 0))
 	      ((eq (get-char-property pos 'field) 'input)
 	       (setq n (if (< n 0) (1+ n) (1- n)))