Fix infloop in 'shell-resync-dirs'
* lisp/shell.el (shell-eval-command): Fix detection of newline after last output line. (Bug#71896) (shell-resync-dirs): Make sure the inner loop never infloops. Suggested by Troy Hinckley <troyhinckley@dabrev.com>.
This commit is contained in:
parent
ce13eee5ab
commit
8b1a0f8695
1 changed files with 8 additions and 4 deletions
|
@ -1255,7 +1255,7 @@ line output and parses it to form the new directory stack."
|
|||
(while dlsl
|
||||
(let ((newelt "")
|
||||
tem1 tem2)
|
||||
(while newelt
|
||||
(while (and dlsl newelt)
|
||||
;; We need tem1 because we don't want to prepend
|
||||
;; `comint-file-name-prefix' repeatedly into newelt via tem2.
|
||||
(setq tem1 (pop dlsl)
|
||||
|
@ -1629,10 +1629,14 @@ Returns t if successful."
|
|||
;; a newline). This is far from fool-proof -- if something
|
||||
;; outputs incomplete data and then sleeps, we'll think
|
||||
;; we've received the prompt.
|
||||
(while (not (let* ((lines (string-lines result))
|
||||
(last (car (last lines))))
|
||||
(while (not (let* ((lines (string-lines result nil t))
|
||||
(last (car (last lines)))
|
||||
(last-end (if (equal last "")
|
||||
last
|
||||
(substring last -1))))
|
||||
(and (length> lines 0)
|
||||
(not (equal last ""))
|
||||
(not (member last '("" "\n")))
|
||||
(not (equal last-end "\n"))
|
||||
(or (not prev)
|
||||
(not (equal last prev)))
|
||||
(setq prev last))))
|
||||
|
|
Loading…
Add table
Reference in a new issue