如何为GNU Emacs和Aquamacs定义键绑定?

时间:2014-09-02 18:19:30

标签: emacs aquamacs

我同时使用GNU Emacs for OSX和Aquamacs。我喜欢定义使用Mac命令键的键绑定。

不幸的是,指定键的语法各不相同。

在Aquamacs中,它看起来像这样:

(define-key osx-key-mode-map (kbd "A-h") 'replace-string)

在GNU Emacs for OSX中,它看起来像这样:

(define-key key-minor-mode-map (kbd "s-h") 'replace-string)

有没有办法以GNU Emacs和Aquamacs都能理解的方式指定这些键绑定,这样我每次添加新的键绑定时都不必维护和更新两个单独的.emacs文件?

2 个答案:

答案 0 :(得分:2)

这是我从这里借来的东西:http://www.hulubei.net/tudor/configuration/download/.emacs

我没有测试过代码,但它看起来应该可行。使用此类设置,原始海报只能保留一个.emacs文件和/或加载首选项文件。

  
(defvar gnuemacs-flag (string-match "GNU" (emacs-version)))

(defvar aquamacs-flag (string-match "Aquamacs" (emacs-version)))

(cond
  (aquamacs-flag
    (define-key osx-key-mode-map (kbd "A-h") 'replace-string))
  (gnuemacs-flag
    (define-key key-minor-mode-map (kbd "s-h") 'replace-string)))

答案 1 :(得分:2)

根据立法建议,您甚至可以定义一个功能来执行此操作:

(defvar gnuemacs-flag (string-match "GNU" (emacs-version)))
(defvar aquamacs-flag (string-match "Aquamacs" (emacs-version)))

(defun define-hyper-key (key fun)
  (cond
   (aquamacs-flag
    (define-key osx-key-mode-map (kbd (concat "A-" key)) fun))
   (gnuemacs-flag
    (define-key key-minor-mode-map (kbd (concat "s-" key)) fun))))

;; The aquamacs/gnuemacs keybindings:
(define-hyper-key "h" 'replace-string)