Tenho certeza de que existem outras soluções, mas você pode fazer isso usando em --eval
vez de -f
( --funcall
):
emacs --eval '(ediff-files "file1" "file2")'
De fato, o manual do Emacs sobre "Argumentos de linha de comando para invocação do Emacs" diz que -f function
e--funcall function
Chame a função de função Lisp . Se for uma função interativa (um comando), ele lê os argumentos interativamente, como se você tivesse chamado a mesma função com uma sequência de teclas. Caso contrário, ele chama a função sem argumentos.
Isso explica por que você não pode obter o comportamento desejado com -f
/ --funcall
.
ediff-directories
leva três argumentos; portanto, o comando mostrado acima muda para
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
Conforme explicado aqui , ediff-directories
faz com que o Emacs entre ediff-meta-mode
, então você será incluído no "Painel do grupo de sessões do Ediff" primeiro. No manual Ediff sobre Grupos de sessões :
Várias entradas principais do Ediff realizam comparação e mesclagem em diretórios. Ao entrar ediff-directories
, ediff-directories3
[...] o usuário recebe um buffer do tipo Dired que lista os arquivos comuns aos diretórios envolvidos, juntamente com seus tamanhos. [...] Chamamos esse painel de grupo de sessões de buffer porque todas as sessões do Ediff associadas aos arquivos listados terão esse buffer como ponto focal comum. [...]
Na comparação ou mesclagem de diretórios, um painel de grupo de sessões exibe apenas os arquivos comuns a todos os diretórios envolvidos. As diferenças são mantidas em um buffer de diferenças de diretório separado e são exibidas convenientemente, digitando- Dse no painel do grupo de sessões correspondente. [...]
Então, para exibir o diff real, basta pressionar D( ediff-show-dir-diffs
).