首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs:使自定义滚动功能跟随鼠标,但不改变键盘焦点

Emacs:使自定义滚动功能跟随鼠标,但不改变键盘焦点
EN

Stack Overflow用户
提问于 2012-07-18 07:13:25
回答 1查看 557关注 0票数 2

我在Emacs中有一些自定义的滚动函数,它们帮助我解决了一个错误,即一个scroll事件发送两个<mouse-4><mouse-5>操作。我有:

代码语言:javascript
复制
(setq scroll-down-this-time t)

(defun my-scroll-down-line ()
    (interactive "@")
    (if scroll-down-this-time
        (progn
          (scroll-down-line)
          (setq scroll-down-this-time nil))
      (setq scroll-down-this-time t)))

(setq scroll-up-this-time t)

(defun my-scroll-up-line ()
    (interactive "@")
    (if scroll-up-this-time
        (progn
          (scroll-up-line)
          (setq scroll-up-this-time nil))
      (setq scroll-up-this-time t)))

(global-set-key (kbd "<mouse-4>") 'my-scroll-down-line)
(global-set-key (kbd "<mouse-5>") 'my-scroll-up-line)

这很好用,除了(interactive "@")并不是我想要的。这会导致鼠标下方的任何缓冲区滚动并获得键盘焦点。我希望有一种方法可以让它滚动,但又不会偷走键盘上的焦点(就像(setq mouse-wheel-follow-mouse 't)对普通滚动库所做的那样)。我如何才能做到这一点?

我使用的是Emacs的开发版本,所以不要害怕给我任何新特性。

EN

回答 1

Stack Overflow用户

发布于 2012-07-18 07:27:01

您不应重新定义<mouse-4><mouse-5>,而应改为:

代码语言:javascript
复制
(mouse-wheel-mode 1)

(defvar alternating-scroll-down-next t)
(defvar alternating-scroll-up-next t)

(defun alternating-scroll-down-line (&optional arg)
  (when alternating-scroll-down-next
    (scroll-down-line (or arg 1)))
  (setq alternating-scroll-down-next (not alternating-scroll-down-next)))

(defun alternating-scroll-up-line (&optional arg)
  (when alternating-scroll-up-next
    (scroll-up-line (or arg 1)))
  (setq alternating-scroll-up-next (not alternating-scroll-up-next)))

(setq mwheel-scroll-up-function 'alternating-scroll-up-line)
(setq mwheel-scroll-down-function 'alternating-scroll-down-line)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11532149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档