http://www.perlmonks.org?node_id=129630

stefp has asked for the wisdom of the Perl Monks concerning the following question:

When installing a module with cpan, the resulting tests expect a real ANSI terminal and the interactive shell mode is not. As a result the ^M that should wrap to the begining of the line is printed and the next test output is appended instead of replacing the previous one. As a result,the buffer is littered with tests results.

The good news is that there is some hook to do filtering. It is used by M-x ansi-color-for-comint-mode-on which looks fine. Has someone written a filter that does the right thing with ^M. It should be easy to write for a elisp master but I am just a elisp hater. Help!

A second look shows that to be perfect one should implement one of the ANSI cursor move.

-- stefp

  • Comment on problem: emacs interactive shell and cpan

Replies are listed 'Best First'.
Re: problem: emacs interactive shell and cpan
by stefan k (Curate) on Dec 05, 2001 at 20:51 UTC
    This is a well known problem. A quick glance at the newsgroup finds some things:
    • Use the tshell
      article
    • Set up correct terminfo (and hope that the program you use looks at it).
      article
    • Have a look at the eterm package in your distribution (I'm not sure if this is XEmacs only). This package contains the tshell and the doc says it's a realy ANSI terminal: * Uses standard ANSI (vt102) escape sequences.
    • Here is a longer discussion of the topic.
    Good Luck!

    Regards... Stefan
    you begin bashing the string with a +42 regexp of confusion

Re: problem: emacs interactive shell and cpan
by clemburg (Curate) on Dec 05, 2001 at 22:43 UTC

    I am not sure if I understand you right, but for a similar problem I used this little snippet for XEmacs:

    ;; stop ^M from appearing in shell window (add-hook 'comint-output-filter-functions 'shell-strip-ctrl-m nil t)

    Christian Lemburg
    Brainbench MVP for Perl
    http://www.brainbench.com

      I assumed wrongly that the problem was both with emacs and xemacs and used emacs as the generic term. But emacs works as I want while xemacs does not. So all what I said before and below do apply only for xemacs

      What I want is ^M to wrap the caret to the beginning of the line, so that the material that come after the ^M overwrites the previous material. Anyway the code of shell-strip-ctrl-m is certainly a good starting point. Thanks.

      -- stefp