Subject: bug#31115: 26.1; python shell flicker

From: [email-masked] (Charles A. Roelli)
Date: Mon, 09 Apr 2018 20:19:51 +0200

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.

Obviously, the above recipe is not a standard use case for a shell
buffer, but the same flicker is observed during normal use too.

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)

I have no idea why that works, but it seems to help.  The function in
question was added in the following commit:

  commit a6dc66a5441bc6832c12d362edd2d886edc1612a
  Author: Fabián Ezequiel Gallina <[email-masked]>
  Date:   Sat Jul 26 23:02:38 2014 -0300

      Faster comint output.

      * lisp/progmodes/python.el:
      (python-comint-output-filter-function): Make obsolete.
      (python-comint-postoutput-scroll-to-bottom): New function.
      (inferior-python-mode): Set comint-output-filter-functions to a
      minimum.

      Fixes: debbugs:16875