2010-08-19 22 views
9

Je travaille sur un mode emacs pour un outil de révision, et je veux utiliser ediff pour afficher les différences ... le problème est que l'outil de révision ne fournit qu'un diff, plutôt que des fichiers anciens et nouveaux. Je voudrais placer l'ancien fichier dans un tampon et appliquer un diff plutôt que de copier le fichier, en appelant diff comme un sous-processus et en le chargeant dans un tampon séparé.Existe-t-il une fonction dans elisp pour appliquer un patch à un buffer?

Cela peut-il être fait sans l'écrire moi-même, quelqu'un le sait-il?

Répondre

8

ediff-patch-tampon peut être utilisé pour Patch un tampon dans ediff mode

+0

Bon conseil, cependant cela va créer un tampon corrigé avec "_patched" ajouté à son nom. Je pense que vous devez copier manuellement le contenu après cela. – Arne

7

Selon votre flux de travail, cela peut ou non s'appliquer.

Essayez

M-x diff-mode 

à partir duquel vous pouvez faire des commandes comme:

C-c C-a   diff-apply-hunk 
C-c C-b   diff-refine-hunk 
C-c C-c   diff-goto-source 
C-c C-d   diff-unified->context 
C-c C-e   diff-ediff-patch 

Le flux le plus intuitif pour moi est le 'diff-ediff-patch.

Lorsque vous consultez un correctif, exécutez C-c C-e, entrez le nom du fichier à corriger (par exemple file.to.patch). Emacs vous installera ensuite avec un ediff de deux buffers file.to.patch.orig et file.to.patch contenant le fichier original et la version patché. Vous utilisez ensuite ediff comme vous le feriez régulièrement. À la fin du flux, vous avez la version corrigée dans le nom de fichier que vous voulez.

Consultez le documentation for diff-mode.

1

Il y a aussi M-x epatch qui demande un tampon contenant un patch (gnous courrier par exemple) et demande ensuite un fichier/répertoire à patcher. Très utile.