El save-some-buffers
comando solicita guardar o ignorar cada archivo modificado, y también proporciona una opción para diferenciar el archivo modificado con el archivo que está visitando.
Me gustaría el mismo comportamiento de kill-buffer
o kill-this-buffer
. Si se modifica el búfer, ya hay un sí / no, pero también me gustaría la opción de ver los diferenciales.
¿Hay una forma integrada de hacer esto, o un punto de extensión apropiado? ¿O debería vincular mi propio comando kill-buffer?
buffers
kill-buffer
glucas
fuente
fuente
defadvice
. Esto le permitirá ampliar fácilmente el incorporadokill-buffer
.buffer-modified-p
y llamar al originalkill-buffer
para continuar matando sin otro aviso. Me pregunto si hay una mejor manera, pero podría intentarlo.save-some-buffers
durante varios años y nunca supe que tiene unadiff
función ... ¡Gracias!Respuestas:
La gran pregunta es si desea este comportamiento para
kill-buffer
sí mismo, lo que significa no solo cuando lo llama de forma interactiva sino para cada uso del mismo en el código Lisp existente, o si lo desea solo para uso interactivo.Asumiré lo último. En ese caso, déjelo
kill-buffer
solo, defina su propio comando que haga lo que desee y vuelva a asignar las teclas que normalmente están vinculadaskill-buffer
a su comando:Para su
my-kill-buffer
comando, simplemente verifique desde el principio si el búfer ha sido modificado, y si es así, inicieediff
para ello.Para verificar si se ha modificado, use
buffer-modified-p
.Para
ediff
que presumiblemente que desee tomar el archivo (es decir, el búfer como salvado) y comparación contra la corriente, tampón modificado. Es posible que necesite tocar un poco para hacer eso, no sé de unediff
comando existente que lo haga.Pero tal vez todo lo que realmente necesitas es algo así
highlight-changes-mode
. Vea el manual de Emacs, nodoHighlight Interactively
. En otras palabras, quizás todo lo que necesita es invocarhighlight-changes-mode
si el búfer ha sido modificado.fuente
diff-buffer-with-file
para producir los diffs. También parece que necesito llamarset-buffer-modified-p
si quiero continuar y matar sin que se lo solicite nuevamente desde la implementación nativa.En base a las otras respuestas y comentarios, aquí hay un comando de matar personalizado que brinda la opción de diferenciar un búfer modificado con el archivo que está visitando. He mapeado esto,
C-x C-k
pero también podría reasignarkill-buffer
como se sugiere en la respuesta de @ Drew.Usando la misma implementación básica, también podría aconsejar
kill-buffer
. Con este enfoque, tiene la opción de ver las diferencias en cualquier lugar quekill-buffer
se llame, por ejemplo, al eliminar los búferes marcados de Ibuffer.fuente