[PATCH] emacs: show: stop stderr appearing in buffer
Mark Walters
markwalters1009 at gmail.com
Thu Sep 12 08:43:28 PDT 2013
On Thu, 12 Sep 2013, Austin Clements <amdragon at MIT.EDU> wrote:
> Quoth Mark Walters on Sep 12 at 10:33 am:
>>
>> Hi
>>
>> On Tue, 10 Sep 2013, David Bremner <david at tethera.net> wrote:
>> >> Ideally, we would put this output in the notmuch errors buffer but the
>> >> handler is called asynchronously so we don't know when the output will
>> >> appear. Thus if we put it straight into the errors buffer it could get
>> >> interleaved with other errors, otoh we can't easily tell when we
>> >> have got all the error output so can't wait until the process is complete.
>> >
>> > Hi Mark;
>> >
>> > I think your patch is OK, but would it be much harder to created a named
>> > buffer like *notmuch-view-$message-d* ? (using e.g. the code from
>> > notmuch-show). I might make debugging easier.
>>
>> Yes this is easy. There are several possibilities and I am not sure
>> which is best (some are clearly bad but are worth mentioning anyway).
>>
>> 1) have a single buffer for part errors; this would accumulate stuff and
>> output seems to get interleaved so this is probably useless.
>>
>> 2) have a buffer for each part viewer as you describe.
>>
>> 3) have a buffer for each part viewer but start its name with a space so
>> it doesn't show up in buffer lists but is findable (maybe)
>
> 3.5) Say something in the echo area when a viewer terminates with
> output, so it doesn't interrupt the user if they're doing something,
> but the output buffer is still discoverable. Maybe bind C-c ` to show
> the most recently reported output buffer, like what (la)tex-mode and
> others do, and mention this binding in the echo area message.
The key problem here is that I don't know how to tell when the viewer
terminates. The viewer is run asynchronously and the sentinel for that
process puts the output in the buffer that called mm-display-external
(provided that that buffer is still alive).
Moreover, the code in mm-display-external seems to do some strange point
moving:
(when (buffer-live-p outbuf)
(with-current-buffer outbuf
(let ((buffer-read-only nil)
(point (point)))
(forward-line 2)
(mm-insert-inline
handle (with-current-buffer buffer
(buffer-string)))
(goto-char point))))
which seems to put this batch of error/output into the buffer two lines
into the previous batch of error/output.
>
>> 4) stick with just the temp buffer approach
>>
>> Also, we could have it togglable with some sort of debug flag. In some
>> senses 3 is nice but you would probably end up with 10's or even
>> hundreds of hidden buffers which seems bad. In 2 you see them so you
>> probably kill them as you go but I think they would be pretty
>> annoying. A key difference from the accumulated show/search/pick buffers
>> is that, at some point, you did want to see those buffers.
>
> 3.5.1) Don't create a buffer until the command has output (or, easier
> to implement: create the buffer, but kill it on exit if there was no
> output). When starting a new command, kill output buffers from
> no-longer-running viewers that have never been visited (using
> buffer-display-count or buffer-display-time).
Again this relies on being able to tell when a viewer has finished. If I
can do that then I think I could just put the output as a block in
*notmuch-errors*
Best wishes
Mark
>
>> Since all these approaches are easy to implement it is really up to us
>> which we want.
>>
>> Any thoughts?
>>
>> Mark
>>
>>
>> >
>> > Of course those buffers would accumulate, along with show, search and
>> > pick buffers...
>> >
>> > Or we could push this as is, and add some debugging facility later like
>> > a variable notmuch-view-errors-buffer.
>> >
>> > d
More information about the notmuch
mailing list