重新绑定到在 OS X 上的 Emacs 中

重新绑定到在 OS X 上的 Emacs 中

我使用 MacBook Pro,因此只能使用单键触控板。当然,我可以mouse-1通过单击和mouse-3用两根手指单击来操作,但对于中键单击 ( ),我无能为力mouse-2

我很惊讶以前我没遇到过这个问题,但直到最近我才开始为没有鼠标中键而烦恼。特别是,我开始使用ERCflyspell,这两个功能都需要单击鼠标中键。

我在 Google 上搜索了很多次,但还是没能找到办法。这正是我想要做的:

在 Emacs 中,我希望 Emacs 看起来command+mouse-1就像mouse-2。基本上,我希望有一种重新绑定<s-mouse-1>来触发<mouse-2>事件的方法。这可能吗?

如果它有帮助的话,我正在使用 Cocoa Emacs 的 Emacs 24 版本之一,并且在 '08 时代的 macbook pro 上运行 Lion。

答案1

尝试这个:

(define-key key-translation-map (kbd "<C-down-mouse-1>") (kbd "<down-mouse-2>"))

欲了解更多信息,请阅读翻译按键映射

答案2

鼠标事件带有额外信息,例如其几何属性。由于 emacs 错误,在事件key-translation-map之间直接使用会失败kbd#28955

我现在使用以下命令将超级左键单击变为中键单击的别名:

;; super-left-click is middle click
(defun middle-click (prompt)
  (defun inner (e)
    (interactive "e")
    (setcar e 'mouse-2)
    (vector e))
  (call-interactively 'inner))

(define-key key-translation-map (kbd "s-<mouse-1>") 'middle-click)

这是我编写的第一个非平凡的 elisp,因此几乎肯定可以以某种方式进行改进。希望这对您有所帮助。

答案3

这不是一个解决方案,而是一个解决方法,但我目前正在尝试(开源)MiddleClick 应用程序它通过在您三指点击时触发中键单击来在整个系统中添加中键单击功能。

唯一的问题是,您可能会不时用三根手指触摸触控板,从而意外按下中键,这有点烦人。如果您没有使相应的滚动动作足够明显,系统触控板绑定(例如App ExposeMission Control)显然可能会与三指点击发生冲突。您可以通过调整源来解决这些冲突,因为似乎正在运行的应用程序本身中没有设置。

您也可以通过 homebrew 安装 MiddleClick:

brew cask install middleclick

编辑:

事实证明,MiddleClick 的三指点击行为相当烦人且无法使用,至少对我来说是这样。此外,尝试修改源代码以获得更好的行为被证明是得不偿失的,因为 MiddleClick 使用了MultitouchSupport.framework,它是私有的,需要进行逆向工程才能理解其函数的参数。不幸的是,我现在没有时间这样做,尤其是对于如此基本的事情。然而,我确实发现BetterTouch工具它实现了相同的基本功能,但提供很多更具可定制性。它不是免费的,但只需 3 美元,而且它与 Magic Trackpad 2 配合得很好,而我尝试过的类似应用程序却不能做到这一点,MagicPrefs。

BetterTouchTool 也可以通过 homebrew 安装:

brew cask info bettertouchtool

答案4

Trey 的建议对我没有用,但是这个有用:

(define-key key-translation-map (kbd "<C-mouse-1>") (kbd "<mouse-2>"))

这将控制键左键单击映射到鼠标中键单击(这个down-功能对我来说不起作用)。

注意 Alex R:C-...是 control-,而不是 command-(小写s-...

相关内容