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
).
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
funciona bem.D
(ediff-show-dir-diffs
).*** No differences ***
clico em D, ele mostra dir1 e dir2 e , mesmo que eu invoque ediff do emacs com o Mx, tudo funciona como esperado (ou seja, as diferenças são mostradas). Talvez eu tenha algo definido de maneira diferente nos meus .emacs.Eu uso o seguinte script: ele verifica com antecedência se há diferenças e, se houver, abre o Emacs com a função apropriada avaliada. Com a
-d
opção, assume que os itens fornecidos são diretórios e, emediff-directories
vez de,ediff-files
são usados; caso contrário, verifica se são diretórios ou arquivos e define a função para usá-la de acordo.Como ele verifica se há diferenças antecipadamente, acho muito útil ao comparar vários arquivos em pastas diferentes, na linha de comando, em vez de executar uma única sessão diff nas pastas pai. Por exemplo, para comparar as pastas A e B e copiar arquivos inexistentes do primeiro para o outro ...
fonte