Estoy bastante seguro de que hay otras soluciones, pero puede hacerlo usando en --eval
lugar de -f
( --funcall
):
emacs --eval '(ediff-files "file1" "file2")'
De hecho, el manual de Emacs sobre "Argumentos de línea de comando para la invocación de Emacs" dice que -f function
y--funcall function
Llame a la función de la función Lisp . Si es una función interactiva (un comando), lee los argumentos de forma interactiva como si hubiera llamado a la misma función con una secuencia de teclas. De lo contrario, llama a la función sin argumentos.
Esto explica por qué no puede obtener el comportamiento que desea con -f
/ --funcall
.
ediff-directories
toma tres argumentos, por lo que el comando que se muestra arriba cambia a
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
Como se explica aquí , ediff-directories
hace que Emacs ingrese ediff-meta-mode
, por lo que primero se lo colocará en el "Panel de grupo de sesión de Ediff". Del manual de Ediff sobre Grupos de sesiones :
Varias entradas importantes de Ediff realizan comparaciones y fusiones en directorios. Al ingresar ediff-directories
, ediff-directories3
[...] al usuario se le presenta un búfer tipo Dired que enumera los archivos comunes a los directorios involucrados junto con sus tamaños. [...] Llamamos a este Panel de Grupo de Sesión de búfer porque todas las sesiones de Ediff asociadas con los archivos listados tendrán este búfer como un punto focal común. [...]
En la comparación o fusión de directorios, un panel de grupo de sesión muestra solo los archivos comunes a todos los directorios involucrados. Las diferencias se mantienen en un búfer de diferencia de directorio separado y se muestran convenientemente escribiendo Den el panel del grupo de sesión correspondiente. [...]
Entonces, para mostrar la diferencia real, simplemente presione D( ediff-show-dir-diffs
).
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
funciona bien.D
(ediff-show-dir-diffs
).*** No differences ***
, aunque invoco ediff desde dentro de emacs con Mx, todo funciona como se esperaba (es decir, se muestran las diferencias). Tal vez tengo algo configurado de manera diferente en mis .emacs.Utilizo el siguiente script: comprueba de antemano si hay diferencias y, en caso de que existan, abre Emacs con la función adecuada evaluada. Con la
-d
opción, asume que los elementos provistos son directorios, y enediff-directories
lugar deediff-files
ser usados; de lo contrario, verifica si son directorios o archivos, y establece la función para usar en consecuencia.Como comprueba si hay diferencias por adelantado, me resulta muy útil al comparar muchos archivos en diferentes carpetas, desde la línea de comandos, en lugar de ejecutar una única sesión de diferencias en las carpetas principales. Por ejemplo, para comparar las carpetas A y B, y copiar archivos no existentes del primero al otro ...
fuente