Emacs отвязывает 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-mode. Я предполагаю, что 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.


person darksky    schedule 11.10.2013    source источник
comment
C-c C-c определен для многих режимов. Возможно, вам следует рассмотреть возможность stackoverflow.com/questions/ 683425/   -  person scottfrazer    schedule 12.10.2013
comment
Или просто рассмотрите возможность использования другого ключа. C-c, за которым следует управляющая клавиша (например, C-c), зарезервирована для основных режимов, что означает, что код Лиспа, определяющий основной режим, имеет право использовать его (и они часто используют C-c C-c, как сказал Скотт Фрейзер). Конечно, пользователи по-прежнему имеют право привязывать такой ключ, но просто знайте, что основные режимы также могут делать это, поэтому вам может потребоваться найти ключ на замену для таких режимов (см. ответы здесь для этого) . См. руководство по Elisp, узел Key Binding Conventions.   -  person Drew    schedule 12.10.2013
comment
@Drew Я не могу найти привязку C-x, которая была бы бесплатной и легкодоступной / имела смысл для копирования и вставки, которую я использую очень часто.   -  person darksky    schedule 14.10.2013
comment
Этот вопрос не является дубликатом stackoverflow.com/questions /13965966/unset-key-binding-in-emacs, так как ответы там не предлагают использовать add-hook, но ОП утверждает, что они использовали add-hook, и это не сработало. Пометка этого вопроса как дубликата этого вопроса вводит в заблуждение. Ответы на этот вопрос не работают в моем случае, поэтому я разместил этот вопрос.   -  person darksky    schedule 14.10.2013
comment
@Darsky: Тогда не используйте для этого префикс C-x. Есть еще много ключей, доступных для вас. См. руководство, Key Binding Conventions для которого ключи зарезервированы для пользователей. (И вы также можете привязать любые другие клавиши, но они могут переопределить ключи режима и т. д.) И вы можете определить свои собственные префиксные ключи: например, вы можете сделать <f8> префиксом для некоторых или всех ваших собственных ключей.   -  person Drew    schedule 14.10.2013


Ответы (1)


Это должно сделать это:

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