![在 Aquamacs 中将“cmd”+“W”重新映射到 kill-buffer?](https://linux22.com/image/1403323/%E5%9C%A8%20Aquamacs%20%E4%B8%AD%E5%B0%86%E2%80%9Ccmd%E2%80%9D%2B%E2%80%9CW%E2%80%9D%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%E5%88%B0%20kill-buffer%EF%BC%9F.png)
在Aquamacs 3.2,我想重新映射cmd+ W,这样它就会终止当前缓冲区而不是关闭框架。我使用 Aquamacs 的经典 Emacs 风格,只有一个窗口,因此我关闭缓冲区的次数远多于关闭窗口的次数。
我尝试过这个,但.emacs
没有效果。
(global-unset-key [?\s-w])
(define-key global-map [?\s-w] 'kill-buffer)
我也尝试了这个答案但它仍然会关闭窗口。
(defun kill-current-buffer ()
(interactive)
(kill-buffer (current-buffer)))
(global-unset-key (kbd "s-w"))
(global-set-key (kbd "s-w") 'kill-current-buffer)
我也尝试将该代码~/Library/Preferences/Aquamacs Emacs/Preferences.el
放入在这个答案中建议。
我已经验证describe-function
它已经加载。
kill-current-buffer is an interactive Lisp function in `.emacs'.
It is bound to s-W.
(kill-current-buffer)
Not documented.
答案1
有两件事正在发生。首先,Aquamacs 已将 Mac OS X 命令键重新映射到alt。因此它应该是(global-set-key '[(alt w)] 'kill-current-buffer)
。
但是这会给出警告,因为第二件事,osx-key-mode
已经定义了自己的osx-key-mode-map
。Emacs 建议使用重新定义该键映射中的该键define-key
。
(defun kill-current-buffer ()
(interactive)
(kill-buffer (current-buffer)))
(when (boundp 'osx-key-mode-map)
(define-key osx-key-mode-map '[(alt w)] 'kill-current-buffer))