2010-09-02 68 views
34

我发现自己想要使用Emacs,主要是因为组织模式,但是我很难习惯滚动的滚动行为。我知道这是Emacs的一个众所周知的问题/怪癖,并且有多种方式可以在滚动时减少干扰。但是,我迄今为止所做的任何尝试都没有发生。修复在emacs中顺利滚动?

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

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

按住光标键的问题在我看来似乎是向上箭头或向下箭头的重复速度如此之快,它会触发emacs停止屏幕刷新,直到释放键。我想知道对我来说可能的解决方法是在key-repeat速率中添加一些滞后时间,或者在emacs中调用下一个/上一个行函数的速率。

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

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

+0

'滚动conservatively'的值大的工作来解决这个对我来说...也许你的电脑比你的键盘慢? :) – 2010-09-02 21:08:13

+0

Trey - 谢谢,我想知道是否可能是这种情况。所以看来我需要一些进一步的步骤来平滑滚动。我的电脑不是怪物机器,但我不会说它慢;这是一款配备奔腾SU4100,双核1.3GHz芯片和4GB内存的笔记本电脑。 – 2010-09-02 21:23:49

+0

请问,你能告诉我们,如果你在Windows上有emacs,Un * x,它是否在像gnome这样的桌面环境或GUI(屏幕)之外的终端窗口(-nw)中? – 2010-09-03 09:17:35

回答

40

我有同样的问题!尝试所有的滚动*设置,按住箭头时没有帮助。但是,(至少对我来说)发现了这个在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) 
+2

+1;在相当强大的Win7 x64机器上遇到与OP相同的问题;此修复使滚动容许(虽然不如其他平台启用smooth-scrolling.el时好) – 2010-12-30 22:26:56

+1

谢谢!刚刚在此主题中注意到您的建议,确实对我有用。 – 2011-02-27 23:58:30

+1

我还需要(setq-default scroll-up-aggressively 0.01 scroll-down-aggressively 0.01)使事情合理(请参阅http://zhangda.wordpress.com/2009/05/21/customize-emacs-automatic-滚动和停止最光标从跳-周围-AS-I - 移动 - 它/) – 2013-05-13 17:28:28

6

scroll-conservatively有帮助,但我也喜欢保证金,这样我就可以看到即将滚动的内容 - 它为我保留了屏幕上下文。这些设置对我来说在几年内对各种计算机运行良好:

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

谢谢,但我已经尝试过使用不同的滚动保留值和滚动保证金值,但他们没有解决问题。如果我每次向上或向下移动时分别按下光标键,滚动就足够平滑,但如果按住光标键,则屏幕冻结,而滚动指示器显示通过文件移动的位置。屏幕不会刷新,直到我拿掉钥匙。 – 2010-09-02 22:38:16

+0

是的,我注意到你在你的帖子中说过...我已经在GNU Emacs中使用了这些设置,从运行Ubuntu的Atom上网本到运行OS X的Core 2 Duo以及工作中的四核Windows桌面。 ..你使用的是什么品牌和Emacs的构建? – 2010-09-02 22:41:55

+0

我在LENNART-69DE564(已修补)的2009-11-03的64位Windows 7上运行此操作系统:GNU Emacs 23.1.50.1(i386-mingw-nt6.1.7600)。我必须检查,但我确定我在其他计算机上有相同的行为,其中包括原子上网本和其他几个笔记本。 – 2010-09-02 22:45:01

2

在所有平台上都没有遇到此问题。对于那些造成问题的平台,我会建议使用此设置:

(setq scroll-conservatively 0) 

它把光标在屏幕上的每个滚动到另一页时间的中间。

+2

这是所有平台的默认设置,我想。问题是它甚至没有真正滚动,当你到达底部时,屏幕只跳了半页。也许多年来一直使用emacs的人会接受这种方式,但这与几乎所有其他编辑人员都有所不同。其他文本编辑器(以及其他应用程序,如浏览器和文字处理器)将滚动。为了使缓冲窗口突然向上移动半个屏幕是令人不安和不友好的。 – 2010-09-03 16:57:53

1

正如rpdillon的建议,我对Adam Spires的smooth-scrolling非常满意。我认为它值得自己回答。

+0

我也尝试了smooth-scrolling.el,正如我在原文中所说的那样。它对我来说不比保守解决方案更好。 – 2010-09-03 16:58:40

+0

对不起,我忽略了这一点。 – 2010-09-06 08:48:00

4

试试这个:

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

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

0

我可以用M-向上/ M-下只有一条线通过增加这对我的.emacs滚动:

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

注意,这是没有提及任何地方在这里,但我找到了更大的文件我最终遇到了一些令人不快的滞后,滚动将在后面进行字体更新。

这依赖于重绘不是因此慢,系统在其更新后太慢。

有关详细信息,请参阅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 
)