[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to make ^M in a buffer go to the beginning of line?
From: |
Pascal J. Bourguignon |
Subject: |
Re: How to make ^M in a buffer go to the beginning of line? |
Date: |
Mon, 23 Nov 2015 01:49:08 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) |
Marcin Borkowski <mbork@mbork.pl> writes:
> so I have this buffer, which displays the output of a process. This
> output contains loads of ^M characters, since - when run from a terminal
> - the process displays a one-line, real-time-updated progress
> information (like "n/m processed"). I'd like to mimic this behavior
> when calling it from Emacs (programmatically, not from M-x term or
> anything like that).
Assuming you are using comint, you need to add a function to perform
this processing in:
comint-preoutput-filter-functions
or perhaps:
comint-output-filter-functions
otherwise you will have to modify the process-filter.
Notice that the processing you will have to do is not trivial:
the text you receive in the preoutput-filter may contain several lines.
Each line may contain several CR. You must take into account the
existing text in the current line: if it's longer than the new text, the
tail will have to show after the new text; and the same must happen with
all the CR sequences. You must also deal with the trailing CR.
Assume the end of buffer is a line:
fuck! world!
without trailing newline
(cr-preoutput-filter "----o\r---l\r--l\r-e\rh\r")
will have to replace this last line with:
hello world!
^
with the current position at column 0, so that
a following
(cr-preoutput-filter "good bye,\nold world!\n")
diplays:
good bye,ld!
old world!
^
(Remember that newline is equivalent to CR LF, therefore there's no
reason to erase what's beyond the current possition when processing the
\n).
--
__Pascal Bourguignon__ http://www.informatimago.com/
“The factory of the future will have only two employees, a man and a
dog. The man will be there to feed the dog. The dog will be there to
keep the man from touching the equipment.” -- Carl Bass CEO Autodesk