如何在OSX上的emacs中关闭标准的osx文本编辑绑定

时间:2014-12-12 16:07:02

标签: macos emacs key-bindings

我希望不再在emacs中提供任何标准的osx文本编辑绑定。我使用的是标准的gnu emacs。只剩下旧学校" emacs命令。换句话说:没有更多的命令+ c用于复制,没有命令+ z用于撤销等。有没有办法在不明确重新绑定每个组合键的情况下执行此操作?我尝试使用谷歌搜索方式来做到这一点,但没有找到任何东西。

3 个答案:

答案 0 :(得分:2)

这些键绑定在ns-win.el中定义为here

似乎没有简单的方法解开所有这些。您可以将ns-win.el中的所有键绑定复制到暂存缓冲区中。它们看起来像这样:

(define-key global-map [?\s-,] 'customize)

然后点击C-M-% query-replace-regexp,输入^(define-key global-map \(.*\) '.*)$作为搜索表达式,(global-unset-key \1)作为替换,将这些键绑定转换为:

(global-unset-key [?\s-,])

然后,选择所有内容并输入M-x eval-region

答案 1 :(得分:1)

在OS X中的Emacs中,默认设置是CMD密钥绑定到SUPER限定符,并且诸如S-x,S-c和S-v之类的许多密钥绑定到命令以使正常的OS功能小型化。 OPTION键绑定到META。不幸的是,基本设置不允许您键入通常需要OPTION键的字符,例如“|”和“\”。

以下内容将CMD绑定到meta,并使OPTION可用于正常的字符合成。

(if (boundp 'ns-command-modifier)
    (setq ns-command-modifier 'meta))

(if (boundp 'ns-option-modifier)
    (setq ns-option-modifier nil))

答案 2 :(得分:1)

我发现令人反感的键绑定是绑定到 SUPER 又名命令。要禁用这些绑定,但并非所有NS绑定都已生成:

档案global-unset-all-super-key.el

(defun global-unset-all-super-key ()
  "Will unset any single key in global keymap that has the super
modifier."
  (let ((km (current-global-map)))
    (while km
      (let ((maybe-event (and (listp (car km))
                              (caar km))))
        (if (and (eventp maybe-event) ; Also filters maybe-event when
                                      ; nil because (car km) was not a list.
                 (memq 'super (event-modifiers maybe-event)))
            (global-unset-key (vector maybe-event))))
      (setq km (cdr km)))))

(provide 'global-unset-all-super-key)

global-unset-all-super-key.el放入Emacs lisp加载路径,并将以下内容添加到init.el.emacs

;; Remove default super bindings on Mac systems.
;; Do this early, before any mappings are added.
(when (string-equal system-type "darwin")
  (require 'global-unset-all-super-key)
  (global-unset-all-super-key))