Je suis sûr qu'il existe d'autres solutions, mais vous pouvez le faire en utilisant --eval
au lieu de -f
( --funcall
):
emacs --eval '(ediff-files "file1" "file2")'
En fait, le manuel Emacs sur "Arguments de ligne de commande pour l'invocation Emacs" dit que -f function
et--funcall function
Appelez la fonction de fonction Lisp . S'il s'agit d'une fonction interactive (une commande), elle lit les arguments de manière interactive comme si vous aviez appelé la même fonction avec une séquence de touches. Sinon, il appelle la fonction sans arguments.
Cela explique pourquoi vous ne pouvez pas obtenir le comportement souhaité avec -f
/ --funcall
.
ediff-directories
prend trois arguments, donc la commande ci-dessus devient
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
Comme expliqué ici , ediff-directories
fait entrer Emacs ediff-meta-mode
, vous serez donc d'abord déposé dans le "panneau de groupe de session Ediff". Extrait du manuel Ediff sur les groupes de sessions :
Plusieurs entrées importantes d'Ediff effectuent des comparaisons et des fusions sur des répertoires. En entrant ediff-directories
, ediff-directories3
[...] l'utilisateur se voit présenter un tampon de type Dired qui répertorie les fichiers communs aux répertoires concernés ainsi que leurs tailles. [...] Nous appelons ce panneau de groupe de sessions tampon car toutes les sessions Ediff associées aux fichiers répertoriés auront ce tampon comme point focal commun. [...]
Dans la comparaison ou la fusion de répertoires, un panneau de groupe de sessions affiche uniquement les fichiers communs à tous les répertoires impliqués. Les différences sont conservées dans un tampon de différence de répertoire distinct et sont facilement affichées en tapant Ddans le panneau de groupe de sessions correspondant. [...]
Donc, pour afficher le diff réel, appuyez simplement sur D( ediff-show-dir-diffs
).
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
marche bien.D
(ediff-show-dir-diffs
).*** No differences ***
, même si j'invoque ediff depuis emacs avec Mx, tout fonctionne comme prévu (c'est-à-dire que les différences sont affichées). Peut-être que j'ai quelque chose de différent dans mes .emacs.J'utilise le script suivant: il vérifie à l'avance s'il y a des différences, et s'il y en a, il ouvre Emacs avec la fonction appropriée évaluée. Avec l'
-d
option, il suppose que les éléments fournis sont des répertoires, etediff-directories
au lieu deediff-files
est utilisé; sinon, il vérifie s'il s'agit de répertoires ou de fichiers et définit la fonction à utiliser en conséquence.Puisqu'il vérifie s'il y a des différences à l'avance, je trouve cela très pratique lors de la comparaison de nombreux fichiers dans différents dossiers, à partir de la ligne de commande, au lieu d'exécuter une seule session diff dans les dossiers parents. Par exemple pour comparer les dossiers A et B, et copier des fichiers inexistants du premier vers l'autre ...
la source