Mercurial > emacs
changeset 4357:5731da0436e8
* gud.el (gud-gdb-marker-filter): Preserve the match data across
the filter's execution.
* gud.el (gud-gdb-marker-filter): If we received some text after
the position marker, append it to any text before the marker,
instead of throwing away the text before the marker.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Fri, 30 Jul 1993 22:43:39 +0000 |
parents | 3f0d5006a2c4 |
children | 74004fb63311 |
files | lisp/gud.el |
diffstat | 1 files changed, 35 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/gud.el Fri Jul 30 22:30:50 1993 +0000 +++ b/lisp/gud.el Fri Jul 30 22:43:39 1993 +0000 @@ -165,48 +165,49 @@ (defvar gud-gdb-marker-acc "") (defun gud-gdb-marker-filter (string) - (setq gud-gdb-marker-acc (concat gud-gdb-marker-acc string)) - (let ((output "")) + (save-match-data + (setq gud-gdb-marker-acc (concat gud-gdb-marker-acc string)) + (let ((output "")) - ;; Process all the complete markers in this chunk. - (while (string-match "^\032\032\\([^:\n]*\\):\\([0-9]*\\):.*\n" - gud-gdb-marker-acc) - (setq + ;; Process all the complete markers in this chunk. + (while (string-match "^\032\032\\([^:\n]*\\):\\([0-9]*\\):.*\n" + gud-gdb-marker-acc) + (setq - ;; Extract the frame position from the marker. - gud-last-frame - (cons (substring gud-gdb-marker-acc (match-beginning 1) (match-end 1)) - (string-to-int (substring gud-gdb-marker-acc - (match-beginning 2) - (match-end 2)))) + ;; Extract the frame position from the marker. + gud-last-frame + (cons (substring gud-gdb-marker-acc (match-beginning 1) (match-end 1)) + (string-to-int (substring gud-gdb-marker-acc + (match-beginning 2) + (match-end 2)))) - ;; Append any text before the marker to the output we're going - ;; to return - we don't include the marker in this text. - output (concat output - (substring gud-gdb-marker-acc 0 (match-beginning 0))) + ;; Append any text before the marker to the output we're going + ;; to return - we don't include the marker in this text. + output (concat output + (substring gud-gdb-marker-acc 0 (match-beginning 0))) - ;; Set the accumulator to the remaining text. - gud-gdb-marker-acc (substring gud-gdb-marker-acc (match-end 0)))) + ;; Set the accumulator to the remaining text. + gud-gdb-marker-acc (substring gud-gdb-marker-acc (match-end 0)))) - ;; Does the remaining text look like it might end with the - ;; beginning of another marker? If it does, then keep it in - ;; gud-gdb-marker-acc until we receive the rest of it. Since we - ;; know the full marker regexp above failed, it's pretty simple to - ;; test for marker starts. - (if (string-match "^\032.*\\'" gud-gdb-marker-acc) - (progn - ;; Everything before the potential marker start can be output. - (setq output (concat output (substring gud-gdb-marker-acc - 0 (match-beginning 0)))) + ;; Does the remaining text look like it might end with the + ;; beginning of another marker? If it does, then keep it in + ;; gud-gdb-marker-acc until we receive the rest of it. Since we + ;; know the full marker regexp above failed, it's pretty simple to + ;; test for marker starts. + (if (string-match "^\032.*\\'" gud-gdb-marker-acc) + (progn + ;; Everything before the potential marker start can be output. + (setq output (concat output (substring gud-gdb-marker-acc + 0 (match-beginning 0)))) - ;; Everything after, we save, to combine with later input. - (setq gud-gdb-marker-acc - (substring gud-gdb-marker-acc (match-beginning 0)))) + ;; Everything after, we save, to combine with later input. + (setq gud-gdb-marker-acc + (substring gud-gdb-marker-acc (match-beginning 0)))) - (setq output gud-gdb-marker-acc - gud-gdb-marker-acc "")) + (setq output (concat output gud-gdb-marker-acc) + gud-gdb-marker-acc "")) - output)) + output))) (defun gud-gdb-find-file (f) (find-file-noselect f))