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 <fgallina@gnu.org>
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