修复在emacs平滑滚动?

我发现自己想要使用Emacs,主要是因为组织模式,但是我很难习惯滚动的滚动行为。 我知道这是Emacs的一个众所周知的问题/偏心,并且有多种方法可以在滚动时减less不必要的干扰。 但是我迄今为止所做的一切都没有变化。

我所看到的主要build议是(setq scroll-conservatively 10000)或者使用smooth-scrolling.el中更全面的修复。 我认为这两种方式对我来说都可以工作,但是当我按住向上和向下箭头键来反复向上或向下滚动时,都会失败。 当我这样做时,屏幕冻结,我看到滚动页边上的滚动指示条向上或向下移动。 屏幕不刷新,直到我停止按住向上箭头或向下箭头键。

如果我反复按向上箭头或向下箭头,那么我的行为接近我想要的,即屏幕平滑滚动,光标键不会重置到屏幕中间。 但这是不可取的,因为(1)它需要重复按键,(2)我认为滚动速度比我应该得到更好的解决scheme更慢。

按住光标键的问题似乎是向上箭头或向下箭头的重复速度太快,触发emacs停止屏幕刷新,直到释放键。 我想知道一个可能的解决办法是在key-repeat率上添加一些滞后,或者在emacs中调用next / previous line函数的速度。

我没有看到这个被别人报告为一个问题,我想知道其他人是否也经历过同样的行为。 什么是最好的方法来解决的事情,所以我可以按住上/下箭头键,并有足够慢的重复速度,使屏幕不冻结?

更新:上述行为是我在Win7 / 64上运行emacs时得到的。 在运行Ubuntu 10.04的VirtualBox虚拟机内部运行emacs的同一台机器上,即使按住光标键也不会出现滚动问题。

我有同样的问题! 尝试所有的滚动设置,按住箭头没有帮助。 但是在gnu.emacs.help上find了这个最终工作的(至less对我来说):

(setq redisplay-dont-pause t)

这就是我现在在.emacs中所拥有的:

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

scroll-conservatively帮助,但我也喜欢一个保证金,以便我可以看到即将到来的滚动 – 它保持在屏幕上的背景为我。 几年来,这些设置对我来说已经非常适用于各种各样的计算机:

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

尝试这个:

 ;; scroll one line at a time (less "jumpy" than defaults) (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ; one line at a time (setq mouse-wheel-progressive-speed nil) ; don't accelerate scrolling (setq-default smooth-scroll-margin 0) (setq scroll-step 1 scroll-margin 1 scroll-conservatively 100000) 

并使用pager.el。

 ;; Pager (require 'pager-default-keybindings) 

这就是我想:)享受!

在所有平台上都不会遇到此问题。 对于那些构成问题的平台,我build议使用这个设置:

 (setq scroll-conservatively 0) 

每次滚动到另一页时,都会将光标置于屏幕的中间位置。

正如rpdillon所build议的那样,我对Adam Spiers的平滑滚动感到非常高兴。 我认为这是值得自己回答的。

我可以通过添加到我的.emacs只有一个M-Up / M-Down的行滚动:

 (global-set-key (kbd "M-<down>") (lambda () (interactive) (scroll-up 1))) (global-set-key (kbd "M-<up>") (lambda () (interactive) (scroll-down 1))) 

请注意,这里没有提到这一点,但是我发现对于更大的文件,我最终遇到了一些恼人的滞后,滚动将在后面进行字体更新。

这依赖于重绘速度不够慢,以至于系统在更新中落后太多。

看到这个问题的细节。


这些设置适合我:

 (setq scroll-conservatively 1000 ;; only 'jump' when moving this far scroll-margin 4 ;; scroll N lines to screen edge scroll-step 1 ;; keyboard scroll one line at a time mouse-wheel-scroll-amount '(6 ((shift) . 1)) ;; mouse scroll N lines mouse-wheel-progressive-speed nil ;; don't accelerate scrolling redisplay-dont-pause t ;; don't pause display on input ;; Always redraw immediately when scrolling, ;; more responsive and doesn't hang! fast-but-imprecise-scrolling nil jit-lock-defer-time 0 )