随着触摸板变得越来越大,我们在输入时就越来越可能不小心接触到触摸板. 大多数的系统都有防护措施让你在输入时暂时屏蔽触摸板的功能,但是这在我使用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.
也许仅仅是巧合,似乎Steve Purcell也实现了类似的东西. 而且他已经将这个minor-mode封装成了package放到Melpa package中了.