如何理解`(setq mouse-wheel-scroll-amount '(1 ((shift) . 1)))`?

Buz*_*uzz 1 emacs scroll mousewheel

我从某个地方复制了这个,它非常适合一次滚动一行。

(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time
Run Code Online (Sandbox Code Playgroud)

但是,我不明白'(1 ((shift) . 1)这里的含义 。有什么作用shift

phi*_*ils 5

与 Emacs 中的任何变量一样,使用C-hv mouse-wheel-scroll-amount来了解它。

在这种情况下,我看到:

mouse-wheel-scroll-amount 是'mwheel.el' 中定义的变量。
它的值为 (5 ((shift) . 1) ((control)))

文档:
旋转鼠标滚轮时滚动窗口的量。这是一个列表,将修饰键映射到在按下修饰键的情况下移动滚轮要滚动的量。列表元素的形式为 (MODIFIERS . AMOUNT) 或者如果 MODIFIERS 为零则只是 AMOUNT。

AMOUNT 应该是要滚动的行数,或者接近全屏时为零。它也可以是一个浮点数,指定要滚动的全屏的分数。接近全屏是比全屏少的“next-screen-context-lines”。

这有点技术性,但告诉我默认情况下,当我使用鼠标滚轮时,Emacs 将一次滚动 5 行;但是当我持有时一次只有 1 行shift;如果我按住ctrl它,它会一次滚动接近全屏的内容——((control))((control) . nil).

的行为:

(setq mouse-wheel-scroll-amount '(1 ((shift) . 1)))
Run Code Online (Sandbox Code Playgroud)

因此等价于简单地

(setq mouse-wheel-scroll-amount '(1))
Run Code Online (Sandbox Code Playgroud)

与后一种情况一样,修饰键没有覆盖。