Назначить несколько комбинаций клавиш Emacs для одной команды? - PullRequest
5 голосов
/ 15 июня 2010

Я даю ErgoEmacs режиму попытку посмотреть, смогу ли я использовать Emacs более комфортно.Некоторые из его сочетаний клавиш довольно интуитивны, но во многих случаях я не хочу прямо заменять значения по умолчанию.

Например, в контексте структуры ярлыков навигации ErgoEmacs, Mh имеет смысл заменить Ca- но я хочу иметь возможность использовать оба, а не только Mh.Я попытался просто дублировать команды:

;; Move to beginning/ending of line
(defconst ergoemacs-move-beginning-of-line-key   (kbd "C-a")) ; original
(defconst ergoemacs-move-end-of-line-key         (kbd "C-e")) ; original
(defconst ergoemacs-move-beginning-of-line-key   (kbd "M-h")) ; ergoemacs
(defconst ergoemacs-move-end-of-line-key         (kbd "M-H")) ; ergoemacs

Но Emacs просто перезаписывает первое связывание клавиш вторым.Какой лучший способ решить эту проблему?

Ответы [ 3 ]

4 голосов
/ 16 июня 2010

Чтобы отправить ответ из списка рассылки ergo-emacs :

Ха Ли сказал:

это очень просто.
в файл ergoemacs-mode.el, это строка (загрузить "ergoemacs-unbind") просто закомментируйте это. Это должно быть все тебе нужно сделать. Тем не менее, обратите внимание, что Связывание клавиш ErgoEmacs определяет те общие ярлыки, такие как Open, Close, Новый, Сохранить ... с помощью клавиш Ctrl + o, Ctrl + w, Ctrl + n, Ctrl + s и т. Д. Около 7 из их или около того. Итак, я думаю, что некоторые из них ударит по Emacs традиционному привязки с помощью Ctrl. если вы новичок в ErgoEmacs и пытается его изучить, вы можете просто попробовать начать с нескольких ключи. эта страница может иметь некоторые полезная информация: http://code.google.com/p/ergoemacs/wiki/adoption спасибо за проверку ErgoEmacs!
Xah 101 http://xahlee.org/

3 голосов
/ 16 июня 2010

Как оказалось, ErgoEmacs использует два файла для определения привязки клавиш.Одним из них является основной файл ergoemacs-mode.el , а другим - выбранная вами раскладка клавиатуры (например, ergoemacs-layout-us.el ).Последний документ создает константу, которую первый использует для создания привязки клавиш.Поэтому, пока я думал, что дублирую привязку клавиш, я на самом деле менял константу, которая впоследствии использовалась для этой цели.

Решение:

В ergomacs-mode.el:

;; Move to beginning/ending of line
(define-key ergoemacs-keymap ergoemacs-move-beginning-of-line-key 'move-beginning-of-line)
(define-key ergoemacs-keymap ergoemacs-move-end-of-line-key 'move-end-of-line)
(define-key ergoemacs-keymap ergoemacs-move-beginning-of-line-key2 'move-beginning-of-line)  ; new
(define-key ergoemacs-keymap ergoemacs-move-end-of-line-key2 'move-end-of-line)  ; new

В ergoemacs-layout-us.el:

;; Move to beginning/ending of line
(defconst ergoemacs-move-beginning-of-line-key  (kbd "M-h"))
(defconst ergoemacs-move-end-of-line-key        (kbd "M-H"))
(defconst ergoemacs-move-beginning-of-line-key2 (kbd "C-a"))    ; new
(defconst ergoemacs-move-end-of-line-key2       (kbd "C-e"))    ; new
2 голосов
/ 15 июня 2010

А? Имеет ли один-единственный способ для каждой функции какой-то золотой принцип ErgoEmacs? Потому что обычное связывание клавиш работает прямо противоположным образом: вы называете по одному ключу за раз и указываете, что он должен делать. Если режим определяет глобальную переменную для обозначения «ключа, с которым связан конец строки», то, конечно, может быть только одно значение, но с помощью нормальных команд привязки вы можете привязать одну и ту же функцию к столько комбинаций, тебе нравится. Фактически, каждое связывание клавиш, которое я когда-либо видел, выглядело либо так

(global-set-key [(meta space)] 'just-one-space)

или как это

(add-hook 'c-mode-hook 'my-c-mode-hook)
(defun my-c-mode-hook ()
  (define-key c-mode-map [(control c) b] 'c-insert-block))

если это только для определенного режима.

...