1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-04 11:40:22 +00:00

(comint-cr-magic): New function.

(toplevel): Add it to comint-preoutput-filter-functions.
This commit is contained in:
Gerd Moellmann 2001-04-18 14:18:44 +00:00
parent 90200fccb1
commit 80c40c6fbc

View File

@ -1496,6 +1496,30 @@ This variable is permanent-local.")
(overlay-put comint-last-prompt-overlay 'evaporate t)
(setq comint-last-prompt-overlay nil)))
(defun comint-cr-magic (string)
"Handle carriage returns in comint output.
Translate carraige return/linefeed sequences to linefeeds.
Let single carriage returns delete to the beginning of the line."
(save-match-data
;; CR LF -> LF
(while (string-match "\r\n" string)
(setq string (replace-match "\n" nil t string)))
;; Let a single CR act like a carriage return on a real terminal.
;; Delete everything from the beginning of the line to the
;; insertion point.
(when (string-match ".*\r" string)
(setq string (replace-match "" nil t string))
(save-excursion
(save-restriction
(widen)
(let ((inhibit-field-text-motion t)
(buffer-read-only nil))
(goto-char (process-mark (get-buffer-process (current-buffer))))
(delete-region (line-beginning-position) (point))))))
string))
(add-hook 'comint-preoutput-filter-functions 'comint-cr-magic)
;; The purpose of using this filter for comint processes
;; is to keep comint-last-input-end from moving forward
;; when output is inserted.