2013-10-11 5 views
5

Я создал макрос связывания пользовательский ключ следующим образом:Emacs отвязать Mode в KeyBinding

(global-set-key (kbd "C-C C-c") "\C-a\C- \C-n\M-w\C-y")

Проблема заключается в том, что C-c C-c определяется для python-send-buffer в python-mode. Поэтому мой макрос работает для всех режимов, кроме режима python. Я предполагаю, что python-mode оценивается после моего файла инициализации, поэтому он перезаписывает эту привязку.

Я попытался отключить C-c C-c используя (eval-after-load "python-mode") и используя global-unset-key но это не работает. C-c C-c в python всегда отображается на python-send-buffer.

Как я могу полностью отключить Python C-c C-c, а вместо этого использовать мой макрос?

Я использую Emacs 24.2.1.

+0

С-С С-с определяется для многих режимов. Возможно, вам стоит рассмотреть http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs – scottfrazer

+1

Или просто подумайте об использовании другого ключа. 'Cc', за которым следует управляющий ключ (например,' Cc'), «зарезервирован для основных режимов», что означает, что код Lisp, который определяет основной режим, имеет право использовать его (и они часто используют 'Cc Cc', поскольку ScottFrazer сказал). Пользователи по-прежнему имеют право связывать такой ключ, конечно, но просто знают, что основные режимы также будут делать это так, поэтому вам может понадобиться найти заменяющий ключ для использования в таких режимах (см. Здесь ответы) , См. Руководство Elisp, узлы «Соглашения о привязке клавиш». – Drew

+0

@Drew Я не могу найти ссылку на C-x, которая свободна и проста в доступе/имеет смысл делать эту копию и вставку, которую я использую очень часто. – darksky

ответ

7
(add-hook 'python-mode-hook 
      (lambda() 
      (local-unset-key (kbd "C-c C-c")))) 
1

Это следует сделать это:

(add-hook 'python-mode-hook 
      (lambda() 
      (define-key python-mode-map (kbd "C-c C-c") nil)))