如何在Emacs中定义比三轮向下更快的滚动?

时间:2012-01-23 06:26:24

标签: emacs scroll elisp

Emacs的一个诱人的缺点是它在'惯性滚动'OSX上的奇怪的滚动机制。经过大量挖掘后,真正的问题似乎是Emacs只能以一,二或三个增量为鼠标滚轮滚动键,即wheel-up|downdouble-wheel-up|downtriple-wheel-up|down。< / p>

然而,当快速滚动时,Mac触控板似乎会产生更大的滚动增量。那么,有没有办法生成更准确的滚动消息,实际上反映了触控板的滚动量?

我正在从http://emacsformacosx.com/运行Emacs 24.0.92。

相关的.emacs设置:

(setq redisplay-dont-pause t)
(setq mouse-wheel-progressive-speed nil)

最终,我想拥有的是这样的:

(defun up-single () (interactive) (scroll-up 1))
(defun up-double () (interactive) (scroll-up 2))
(defun up-triple () (interactive) (scroll-up 3))
...

(global-set-key [wheel-down] 'up-single)
(global-set-key [double-wheel-down] 'up-double)
(global-set-key [triple-wheel-down] 'up-triple)
...

2 个答案:

答案 0 :(得分:1)

我不清楚你想要什么,但是虽然Emacs只有单/双/三次点击的不同事件名称,但它实际上区分了9次点击的序列。 event-click-count可用于从事件中提取此信息。

答案 1 :(得分:0)

似乎Emacs不像OSX那样处理滚动事件。 double-triple-修饰符以及event-click-count函数Stefan mentioned并不表示快速滚动的单个事件,而仅仅是几个滚动事件紧密连续发生。因此,当您开始滚动时,您的“点击次数”为1,然后是2,然后是3,依此类推。

在OSX上,触控板不像鼠标滚轮那样发出单独的滚动事件。相反,每个事件都包含自上次事件以来光标移动了多远的像素增量。程序应将其滚动视图移动与该增量成比例的距离。但是,据我所知,Emacs滚动事件不包含该增量。因此,当前形式的Emacs无法实现惯性滚动。

如果我错了,请纠正我!