fix to get smooth scrolling in emacs?

I find myself wanting to use Emacs, mostly because of org-mode, but I'm having a lot of trouble getting used to the jerky scrolling behavior. I know this is a well-known problem/eccentricity of Emacs and that there are various ways to minimize jerkiness when scrolling. But nothing I've tried so far works very well at all.

The main suggestions I've seen are (setq scroll-conservatively 10000) or to use the more comprehensive fix available in smooth-scrolling.el . I think both of these might work okay for me, but both fail miserably when I hold down the up-arrow and down-arrow key to get repeated scrolling up or down. When I do this the screen freezes and I see the scroll-indicator-bar in the scroll margin move up or down. The screen does not refresh until I stop holding down the up-arrow or down-arrow key.

If I repeatedly press up-arrow or down-arrow then I do get behavior close to what I want, i.e., the screen scrolls smoothly and cursor key does not get reset to middle of screen. But this is undesirable because (1) it requires repeated keypresses and (2) I assume the scrolling is at a slower rate than what I should be able to get in better solution.

The problem with holding the cursor keys down seems to me to be that the repeat rate of up-arrow or down-arrow is so fast that it triggers emacs to stop the screen refresh until key is released. I wonder whether a possible fix for me would be to add some lag into the key-repeat rate or the rate at which the next/previous line function is called in emacs.

I haven't seen this reported as a problem by others and I wonder whether other people have experienced same behavior. What's best way to fix things so I can hold the up/down arrow keys down and have repeat rate that's slow enough so that the screen doesn't freeze?

UPDATE: The above behavior is what I get when I run emacs on Win7/64. On same machine when I run emacs inside a VirtualBox VM running Ubuntu 10.04 it's no problem to get scrolling that works fine even when cursor keys are held down.


I had the same problem! Tried all the scroll-* settings, didn't help when holding down arrow. But found this on gnu.emacs.help which finally worked (for me at least):

(setq redisplay-dont-pause t)

This is what I have in .emacs for now:

(setq redisplay-dont-pause t
  scroll-margin 1
  scroll-step 1
  scroll-conservatively 10000
  scroll-preserve-screen-position 1)

scroll-conservatively helps, but I also like a margin so that I can see what's coming up as a scroll -- it keeps context on the screen for me. These settings have worked well for me an a wide variety of computers for a few years:

(setq scroll-conservatively 10)
(setq scroll-margin 7)