La save-some-buffers
commande invite à enregistrer ou à ignorer chaque fichier modifié et fournit également une option pour différencier le fichier modifié du fichier qu'il visite.
Je voudrais le même comportement de kill-buffer
ou kill-this-buffer
. Si le tampon est modifié, il y a déjà une invite oui / non, mais j'aimerais également avoir la possibilité de voir les différences.
Existe-t-il un moyen intégré de le faire ou un point d'extension approprié? Ou dois-je simplement lier ma propre commande kill-buffer?
buffers
kill-buffer
glucas
la source
la source
defadvice
. Cela vous permettra d'étendre facilement la fonction intégréekill-buffer
.buffer-modified-p
et appeler l'originalkill-buffer
pour continuer tuer sans autre invite. Je me demande s'il y a une meilleure façon, mais pourrait essayer.save-some-buffers
depuis pas mal d'années et je ne savais pas qu'il avait unediff
fonctionnalité ... Merci!Réponses:
La grande question est de savoir si vous voulez ce comportement pour
kill-buffer
lui-même, ce qui signifie non seulement lorsque vous l'appelez de manière interactive, mais pour chaque utilisation dans le code Lisp existant, ou si vous le souhaitez uniquement pour une utilisation interactive.Je suppose que ce dernier. Dans ce cas, laissez-le
kill-buffer
tranquille, définissez votre propre commande qui fait ce que vous voulez et remappez les clés qui sont normalement liéeskill-buffer
à votre commande:Pour votre
my-kill-buffer
commande, vérifiez simplement au départ si le tampon a été modifié, et si oui, lancezediff
-le.Pour vérifier s'il a été modifié, utilisez
buffer-modified-p
.Pour
ediff
vous, vous voudrez probablement saisir le fichier (c'est-à-dire le tampon tel qu'il est enregistré) et le comparer au tampon actuel modifié. Vous devrez peut-être jouer un peu pour faire cela - je ne connais pas deediff
commande existante qui le fasse.Mais peut-être que vous n'avez vraiment besoin que de quelque chose
highlight-changes-mode
. Voir le manuel Emacs, nodeHighlight Interactively
. En d'autres termes, il vous suffit peut-être d'invoquerhighlight-changes-mode
si le tampon a été modifié.la source
diff-buffer-with-file
pour produire les diffs. Il semble également que je doive appelerset-buffer-modified-p
si je veux continuer et tuer sans être à nouveau invité par l'implémentation native.Sur la base des autres réponses et commentaires, voici une commande kill personnalisée qui offre la possibilité de différencier un tampon modifié avec le fichier qu'il visite. J'ai mappé cela à,
C-x C-k
mais je pourrais également remapperkill-buffer
comme suggéré dans la réponse de @ Drew.En utilisant la même implémentation de base, vous pouvez également conseiller
kill-buffer
. Avec cette approche, vous avez la possibilité de voir les différences n'importe où quikill-buffer
est appelé - par exemple, lors de la suppression des tampons marqués d'Ibuffer.la source