修复以在emacs中顺利滚动?

时间:2010-09-02 20:58:36

标签: windows emacs

我发现自己想要使用Emacs,主要是因为org-mode,但我在习惯滚动的滚动行为时遇到了很多麻烦。我知道这是Emacs的一个众所周知的问题/怪癖,并且在滚动时有各种方法可以减少急动。但到目前为止我没有尝试过的任何东西都非常好。

我见过的主要建议是(setq scroll-conservatively 10000)或者使用smooth-scrolling.el中提供的更全面的修复。我认为这些对我来说都可以正常工作,但是当我按住向上箭头和向下箭头键重复向上或向下滚动时,两者都会失败。当我这样做时屏幕冻结,我看到滚动边距中的滚动指示条向上或向下移动。在我停止按住向上箭头或向下箭头键之前,屏幕不会刷新。

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

按住光标键的问题在我看来是向上箭头或向下箭头的重复率非常快,它会触发emacs停止屏幕刷新,直到释放按键。我想知道对我来说可能的修复方法是在密钥重复率或在emacs中调用下一个/上一个行函数的速率中添加一些延迟。

我没有看到其他人报告此问题,我想知道其他人是否经历过同样的行为。什么是解决问题的最佳方法,这样我可以按住向上/向下箭头键,并且重复速率足够慢,以便屏幕不会冻结?

更新:以上行为是我在Win7 / 64上运行emacs时得到的。在同一台机器上,当我在运行Ubuntu 10.04的VirtualBox VM中运行emacs时,即使按住光标键,滚动也没有问题。

7 个答案:

答案 0 :(得分:45)

我遇到了同样的问题!尝试了所有滚动*设置,按住箭头时没有帮助。但是在最终有效的gnu.emacs.help上找到了这个(至少对我而言):

(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)

答案 1 :(得分:6)

scroll-conservatively有所帮助,但我也喜欢一个边距,以便我可以看到即将出现的卷轴 - 它为我保留了屏幕上的背景。几年来,这些设置对我和各种各样的计算机都很有效:

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

答案 2 :(得分:5)

试试这个:

;; 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)

这就是我想要的东西:)享受!

答案 3 :(得分:2)

并非在所有平台上都遇到此问题。对于那些带来问题的平台,我建议使用此设置:

(setq scroll-conservatively 0)

每次滚动到另一页时,它都会将光标放在屏幕中间。

答案 4 :(得分:2)

请注意,这里没有提到这一点,但是我发现对于较大的文件,我最终遇到了一些令人不快的延迟,滚动会让字体更新。

这依赖于重绘不是所以慢,系统在更新时太过落后。

有关详细信息,请参阅this question

这些设置对我很有用:

(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
 )

答案 5 :(得分:1)

正如rpdillon建议的那样,我对Adam Spiers的smooth-scrolling非常满意。我认为它应该得到答案。

答案 6 :(得分:0)

通过将此添加到我的.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)))