Отключение привязки префиксного ключа

В режиме оболочки на emacs текущая привязка клавиш для выхода из режима оболочки ('comint-interrupt-subjob) - "\C-c \C-c", и я хочу изменить ее на "\C-c", как в обычной оболочке Linux. Я пытался

(add-hook 'shell-mode-hook '(lambda ()
  (local-set-key "\C-c" 'comint-interrupt-subjob)
))

Но не вышло. Наверное, нужно отключить префикс, присвоенный "\C-c". Как я могу это сделать?


person sawa    schedule 24.06.2011    source источник


Ответы (2)


Попробуй это:

(eval-after-load "shell"
  '(define-key shell-mode-map (kbd "C-c") 'comint-interrupt-subjob))

В общем, когда вы определяете ключи, вы должны определять их в конкретных таблицах клавиш, а не просто надеяться, что local-set-key сделает то, что вы хотите.

Примечание. Я предпочитаю использовать kbd для описания ключей, ваш "\C-c" будет работать нормально.

person Trey Jackson    schedule 24.06.2011
comment
Еще раз спасибо. Полезно знать о kbd. Я пробовал, но после \ C- кажется, что он все еще ждет продолжения, что означает, что суффикс все еще активен. Есть идеи, почему это так? - person sawa; 25.06.2011

(define-key (current-local-map) "^C" 'comint-interrupt-subjob)

Это будет работать без проверки ошибок локального набора ключей.

person Seth Robertson    schedule 24.06.2011
comment
Я пробовал это, но он возвращает Wrong type argument: keymapp, nil. - person sawa; 25.06.2011
comment
@sawa: Какую версию emacs вы используете? У меня он отлично работает в Emacs 23.3.1. Обратите внимание, что ^ C - это буквальный ^ C (что означает тип ^ Q ^ C), или вы можете использовать вещь (kbd C-c), которую описал Трей. - person Seth Robertson; 25.06.2011
comment
Пробовал на 23.2, а перешил на 23.3. На этот раз решение Трея сработало, а ваше - нет. В любом случае спасибо за помощь. Часто говорят, что в emacs мало ошибок, но я считаю наоборот. - person sawa; 26.06.2011
comment
Оказалось, что мешает библиотека под названием tabbarl.el. Проблема решена. - person sawa; 26.06.2011