help-gnu-emacs
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]