Modificar un defun personalizado para no entrar en conflicto con Magit
-
05-07-2019 - |
Pregunta
Utilizo la siguiente pestaña inteligente defun en mis .emacs para completar una palabra o simplemente para hacer una pestaña estándar:
(global-set-key [(tab)] 'smart-tab)
(defun smart-tab ()
"This smart tab is minibuffer compliant: it acts as usual in
the minibuffer. Else, if mark is active, indents region. Else if
point is at the end of a symbol, expands it. Else indents the
current line."
(interactive)
(if (minibufferp)
(unless (minibuffer-complete)
(dabbrev-expand nil))
(if mark-active
(indent-region (region-beginning)
(region-end))
(if (looking-at "\\_>")
(dabbrev-expand nil)
(indent-for-tab-command)))))
Sin embargo, cuando estoy usando magit-status
para la integración de git Git, pude seleccionar previamente un archivo que ha tenido una modificación, presionar la pestaña e instantáneamente ver una diferencia en ese archivo para ver qué se ha modificado. Sin embargo, cada vez que intento una pestaña ahora, aparece el siguiente error en mi mini-buffer.
indent-relative: Buffer is read-only: #<buffer *magit: my_project*
¿Alguna idea sobre cómo abordar esto y tal vez aplicar la pestaña inteligente anterior solo a ciertos modos?
¡Gracias!
Solución
Soy el encargado de mantener la pestaña inteligente, disponible de GitHub . La última versión define un modo menor que se apaga en un búfer de solo lectura o en el minibúfer, permitiendo que cosas como el modo id y magit funcionen correctamente. También es mejor para manejar situaciones en las que desea que la tecla ejecute un comando diferente a indent-for-tab-command
, como el modo org. Le recomiendo que use la versión de GitHub, ya que evita muchos dolores de cabeza de la versión básica con una combinación de teclas global.