Subject: bug#31115: 26.1; python shell flicker

From: Noam Postavsky <[email-masked]>
Date: Sat, 14 Apr 2018 10:42:12 -0400

severity 31115 minor
tags 31115 + confirmed
quit

Andreas Röhler <[email-masked]> writes:

> On 09.04.2018 20:19, Charles A. Roelli wrote:
>> emacs -q
>> M-x run-python RET C-x o
>>
>> Now press and hold down RET: a lot of prompts fly by, and as soon as
>> point reaches the bottom of the window, there is some flicker where
>> the cursor momentarily appears centered (as if `recenter' was run) and
>> simultaneously all the text in the buffer blinks as if the whole
>> screen was cleared and redrawn.  In contrast, if you try this same
>> recipe in a normal shell buffer from M-x shell, there won't be any
>> flicker.

> Can't reproduce with GNU Emacs 26.1 (build 1, i686-pc-linux-gnu, GTK+
> Version 3.14.5) of 2018-04-10 at Debian

I can reproduce on Emacs 26, both lucid and GTK builds.  Seems pretty
straightforward: point reaches the end of buffer, so Emacs autoscrolls
by half a window, then python-comint-postoutput-scroll-to-bottom kicks
in and scrolls back to the bottom.

>> A naive fix is to comment out the meat of python-comint-postoutput-
>> scroll-to-bottom, and reevaluate it:
>> 
>> (defun python-comint-postoutput-scroll-to-bottom (output)
>>   "Faster version of `comint-postoutput-scroll-to-bottom'.
>> Avoids `recenter' calls until OUTPUT is completely sent."
>>   ;; (when (and (not (string= "" output))
>>   ;;            (python-shell-comint-end-of-output-p
>>   ;;             (ansi-color-filter-apply output)))
>>   ;;   (comint-postoutput-scroll-to-bottom output))
>>   output)

Right, that help because Emacs no longer scrolls the window back to the
bottom.  Seems like (setq scroll-conservatively 1) works better to
preserve the original behaviour (I feel like that's too easy, so I must
be missing something though).