Subject: Re: bug#1973: Bug in simple.el (Emacs version 22.2.1)

From: Sebastian Tennant <[email-masked]>
Date: Wed, 04 Feb 2009 09:47:02 +0000

Quoth Stefan Monnier <[email-masked]>:
>> > I guess it's using shell-mode, but somehow fails to setup the process's
>> > output filter?
>> Now you're making it sound like a bug, just as I'm starting to accept
>> that it's a misfeature :)
>
> One part is whether it should use shell-mode or not.

I dare say it should, given that the command use to create the
asynchronous command is called 'shell-command'.

> Another is whether, when using shell-mode, it should behave like
> M-x shell.
>
> The second part is clearly a bug.  If we decide it shouldn't use
> shell-mode, then the bug needn't be fixed.  But given that it currently
> uses shell-mode, it seems that (contrary to what I thought) the current
> intention is for it to behave like shell-mode, in which case it should
> be fixed.

Agreed.

> I think that all that's needed is a good (set-process-filter
> (get-buffer-process <buf>) 'comint-output-filter) at the right place.
> Tho, maybe a better option is to change the way the process is started
> along the lines of what you originally proposed.

Indeed, why use start-process and then set the process filter when both
can be achieved using make-comint-in-buffer?

>> Even replacing the call to shell-mode with a call to comint-mode makes
>> no difference to the way ^M characters are handled.  In either case the
>> process filter must be explicitly set to 'comint-ouput-filter.  I'd
>> expect something as visually arresting as mangled output to be handled
>> by a mode setting, but hey ho.
>
> This is a more difficult decision: should calling a major-mode affect
> the filter of a process that happens to be running in this buffer?

I see your point.

> Usually, the expectation is that shell-mode (or comint-mode) is not
> called directly, so the process filter is set by the calling code.

Fair enough.  Let's leave it as it is then, and make sure we set it in
the calling code.

>> If it were up to me, I'd rewrite the asynchronous part of shell-command
>> so that make-comint-in-buffer is used to create a Comint mode buffer
>> called *Async Shell Command Output* and leave it at that.
>
> I'm beginning to agree.

Cool.  Using make-comint-in-buffer definitely seems the way to go but
I've changed my mind about in which mode *Async Shell Command* should
be.  I now think Shell mode (rather than leaving it in Comint mode) is
better, simply for the sake of consistency with it's synchronous
counterpart.

Sebastian
-- 
Emacs' AlsaPlayer - Music Without Jolts
Lightweight, full-featured and mindful of your idyllic happiness.
http://home.gna.org/eap