EMACS-DOCUMENT

=============>集思广益

在Emacs中禁用鼠标操作

Table of Contents

随着触摸板变得越来越大,我们在输入时就越来越可能不小心接触到触摸板. 大多数的系统都有防护措施让你在输入时暂时屏蔽触摸板的功能,但是这在我使用Emacs时还远远不够. 在使用Emacs的过程中,我的手是一直放在键盘上的(当然也会放在触摸板上),因此即使我长时间没有输入,也不希望让触摸板重新被激活.

通过一个热键就可以永久性的禁用触摸屏,但是最满足我自己使用方式的解决方案是仅仅在Emacs中禁用触摸板.

(define-minor-mode disable-mouse-mode
  "A minor-mode that disables all mouse keybinds."
  :global t
  :lighter " 🐭"
  :keymap (make-sparse-keymap))

(dolist (type '(mouse down-mouse drag-mouse
                      double-mouse triple-mouse))
  (dolist (prefix '("" C- M- S- M-S- C-M- C-S- C-M-S-))
    ;; Yes, I actually HAD to go up to 7 here.
    (dotimes (n 7)
      (let ((k (format "%s%s-%s" prefix type n)))
        (define-key disable-mouse-mode-map
          (vector (intern k)) #'ignore)))))

我们所做的不过是定义一个minor-mode,在这个minor-mode中将所有涉及鼠标的按键都绑定为ignore. 它只是基于this StackOverflow answer中的代码做了少许改进. 当然要重新启用触摸板也很容易:

(disable-mouse-mode 1)

但是这种方案有两个局限条件:

  • 它无法区分触摸板与真正的鼠标操作,两者都被禁用了.
  • 还是有可能其他的mode又定义了与鼠标相关的快捷键. 但是这个问题不大,因为这种快捷键很少见,因此不小心触发它们的概率也很小. them by accident.

1 Update 29 Jun 2016

也许仅仅是巧合,似乎Steve Purcell也实现了类似的东西. 而且他已经将这个minor-mode封装成了package放到Melpa package中了.