Resulta, C-C-C d ya está enlazado en python-mode
(a 'python-pdbtrack-toggle-stack-tracking
), por lo que es posible que desee revisar su opción de asociación de teclas.
Nota: si solo quiere cortar/pegar una solución, salte hasta el final de la respuesta. Siga leyendo para obtener una explicación de cómo llegar, en caso de que quiera volver a hacerlo.
El macro es un buen comienzo, pero lo que tiene no funcionará del todo. Para conseguir algo que se puede unir a una tecla, tratar Mx insert-kbd-macro de esa macro, y obtendrá:
(fset 'add-docstring
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("def ...unprintable characters...6\"3" 0 "%d")) arg)))
(hm .... caracteres no imprimibles, lo que pueda' corte/pegue en SO, pero puede hacerlo usted mismo para obtener lo correcto). Con un poco de munging, lo que obtienes es equivalente a esto:
(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)))
Ese es el primer paso. Con lo anterior, puede hacer M-x add-docstring
y obtener el comportamiento que desee.
El siguiente paso es lo que ha preguntado: cómo enlazar las claves localmente.La documentación para keybindings begins here, y de su interés es el Local Keymaps section, lo que conduce a lo siguiente:
(add-hook 'python-mode-hook
(lambda() (define-key python-mode-map (kbd "C-c C-d") 'add-docstring)))
Esto configura una función anónima que se llamará cuando python-mode
está encendido, y que la función hace una cosa - configura el enlace de clave que desea en el mapa de teclas específicamente para el modo python.
Si usted lee la Keymaps section de cerca, verá que Emacs sigue la convención de que sólo los usuarios deben unirse a commads Cc a, donde un es cualquier letra inferior o mayúscula (por ejemplo Cc dCc TCc p están disponibles), y los paquetes de limitar fijaciones específicas del modo de Cc%, donde % es cualquier tecla de carácter puntuacion o de control (por ejemplo Cc CcC-c [C-c C-z].
Por lo tanto, si cambia su encuadernación a C-c d, entonces se garantiza que no entrará en conflicto con ningún paquete. El python.el
enviado con Emacs cumple con estas convenciones, al igual que la mayoría de los paquetes enviados con Emacs.
Notarás que utilizo kbd
para leer en las secuencias de teclas. Es portátil y me resulta mucho más fácil de leer.
Hay otras cosas que podría hacer para limpiar esto:
- poner las personalizaciones en un uso named function
- rewrite the macro in elisp
eval-after-load
en lugar del gancho (véase esta pregunta)
Esto es lo que haría por # 1, que le da un lugar útil para poner otras personalizaciones:
(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))
El uso de una función nombrada es un poco más limpio ya que más adelante puede hacer (remove-hook 'python-mode-hook 'my-python-customizations)
si lo desea. Además, si observa el valor del gancho (C-h v python-mode-hook RET), es obvio lo que se llama (la función anónima es más larga y más difícil de leer).
Para los puntos de bonificación, después de que ha pegado el código en su .emacs
hacer M-x-eval región, que le dirá Emacs para evaluar el código de la región. Para ver los cambios en los búferes de python existentes, solo tiene que abrir un nuevo archivo/buffer de python, que desencadenaría el cambio de enlace de clave, que es común a todos los búferes de python.
Happy hacking.
El inevitable seguimiento: por supuesto, comencé a usar diff/ediff, así que me alegro de que los que respondieron me indicaron la dirección correcta. –