我在Emacs中有一些自定义的滚动函数,它们帮助我解决了一个错误,即一个scroll事件发送两个<mouse-4>或<mouse-5>操作。我有:
(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的开发版本,所以不要害怕给我任何新特性。
发布于 2012-07-18 07:27:01
您不应重新定义<mouse-4>和<mouse-5>,而应改为:
(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)https://stackoverflow.com/questions/11532149
复制相似问题