unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* How to make ^M in a buffer go to the beginning of line?
@ 2015-11-22 19:49 Marcin Borkowski
  0 siblings, 0 replies; 2+ messages in thread
From: Marcin Borkowski @ 2015-11-22 19:49 UTC (permalink / raw)
  To: Help Gnu Emacs mailing list

Hi all,

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).

TIA,

-- 
Marcin Borkowski
http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski
Faculty of Mathematics and Computer Science
Adam Mickiewicz University



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: How to make ^M in a buffer go to the beginning of line?
       [not found] <mailman.488.1448221799.31583.help-gnu-emacs@gnu.org>
@ 2015-11-23  0:49 ` Pascal J. Bourguignon
  0 siblings, 0 replies; 2+ messages in thread
From: Pascal J. Bourguignon @ 2015-11-23  0:49 UTC (permalink / raw)
  To: help-gnu-emacs

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


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-11-23  0:49 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <mailman.488.1448221799.31583.help-gnu-emacs@gnu.org>
2015-11-23  0:49 ` How to make ^M in a buffer go to the beginning of line? Pascal J. Bourguignon
2015-11-22 19:49 Marcin Borkowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).