Как определить привязки клавиш для GNU Emacs и Aquamacs?

Я использую как GNU Emacs для OSX, так и Aquamacs. Мне нравится определять привязки клавиш, которые используют командную клавишу Mac .

К сожалению, синтаксис для указания клавиши different отличается для каждого.

В Aquamacs это выглядит так:

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

В GNU Emacs для OSX это выглядит так:

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

Есть ли способ указать эти привязки клавиш так, чтобы они понимали и GNU Emacs, и Aquamacs, чтобы мне не приходилось поддерживать и обновлять два отдельных файла.emacs каждый раз, когда я добавляю новую привязку ключей?

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)

Это то, что я позаимствовал здесь: 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)))
Другие вопросы по тегам