Оказывается, C-c C-d уже связан в python-mode
('python-pdbtrack-toggle-stack-tracking
), поэтому вы можете захотеть вернуться к выбору привязки ключей.
Примечание: если вы просто хотите вырезать / вставить решение, перейдите к концу ответа. Прочтите объяснение того, как туда добраться - на случай, если вы захотите сделать это снова.
Макрос - хорошее начало, но то, что у вас есть, не совсем работает. Чтобы получить что-то, что вы можете привязать к ключу, попробуйте M-x insert-kbd-macro для этого макроса, и вы получите:
(fset 'add-docstring
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("def ...unprintable characters...6\"3" 0 "%d")) arg)))
(хм .... непечатные символы, я не могу вырезать / вставить в SO, но вы можете сделать это самостоятельно, чтобы получить правильную вещь). С небольшим обманом, то, что вы получаете, эквивалентно этому:
(fset 'add-docstring
(lambda (&optional arg)
"Keyboard macro."
(interactive "p")
(kmacro-exec-ring-item `(,(kbd "C-r def C-n C-a C-m C-p C-i C-u 6 \" C-u 3 C-b") 0 "%d")
arg)))
Это первый шаг. С помощью вышеописанного вы можете выполнить M-x add-docstring
и получить желаемое поведение.
Следующим шагом является то, что вы спросили - как связать ключи локально. Документация для сочетаний клавиш начинается здесь , и вас интересует раздел Local Keymaps , который приводит к следующему:
(add-hook 'python-mode-hook
(lambda () (define-key python-mode-map (kbd "C-c C-d") 'add-docstring)))
Это устанавливает анонимную функцию, которая будет вызываться при включении python-mode
, и эта функция делает одно - она устанавливает желаемую привязку клавиш в таблице ключей специально для режима python.
Если вы внимательно прочитаете раздел Keymaps , вы увидите, что Emacs следует соглашению, согласно которому только пользователи должны привязывать запятые к Cc a , где a является любой строчной или заглавной буквой (например, Cc d Cc T Cc p все доступны), и пакеты ограничивают привязки, зависящие от режима, Cc% , где % - любой знак пунктуации или управляющая клавиша (например, Cc Cc Cc [ Cc Cz ).
Итак, если вы измените свою привязку на C-c d , то вы гарантированно не будете конфликтовать с какими-либо пакетами. python.el
, поставляемый с Emacs, следует этим соглашениям, как и большинство (все?) Пакетов, поставляемых с Emacs.
Вы заметите, что я использую kbd
для чтения последовательностей клавиш. Это портативное устройство, и мне его намного легче читать.
Есть и другие вещи, которые вы можете сделать, чтобы убрать это:
- помещает настройки в именованную функцию
- переписать макрос в elisp
- используйте
eval-after-load
вместо крючка (см. Этот вопрос)
Вот что я бы сделал для # 1, что дает вам удобное место для размещения других настроек:
(add-hook 'python-mode-hook 'my-python-customizations)
(defun my-python-customizations ()
"set up my personal customizations for python mode"
;; put other customizations in here
(define-key python-mode-map (kbd "C-c C-d") 'add-docstring))
(defun add-docstring (&optional arg)
"Keyboard macro."
(interactive "p")
(kmacro-exec-ring-item `(,(kbd "C-r def C-n C-a C-m C-p C-i C-u 6 \" C-u 3 C-b") 0 "%d")
arg))
Использование именованной функции немного чище, так как позже вы можете сделать (remove-hook 'python-mode-hook 'my-python-customizations)
, если захотите. Кроме того, если вы посмотрите на значение для ловушки ( C-h v python-mode-hook-RET ), становится очевидным, что вызывается (анонимная функция длиннее и сложнее для чтения).
Для бонусных баллов, после того, как вы вставили код в ваш .emacs
do M-x eval-region , который скажет Emacs оценить код в регионе. Чтобы увидеть изменения в ваших существующих буферах Python, вам просто нужно открыть новый файл / буфер Python, который вызовет изменение привязки клавиш - что является общим для всех буферов Python.
Счастливого взлома.