Saya cukup yakin ada solusi lain, tetapi Anda bisa melakukan ini menggunakan --eval
alih-alih -f
( --funcall
):
emacs --eval '(ediff-files "file1" "file2")'
Bahkan, manual Emacs tentang "Argumen Baris Perintah untuk Doa Emacs" mengatakan itu -f function
dan--funcall function
Panggil fungsi fungsi Lisp . Jika itu adalah fungsi interaktif (perintah), ia membaca argumen secara interaktif seperti jika Anda telah memanggil fungsi yang sama dengan urutan tombol. Kalau tidak, ia memanggil fungsi tanpa argumen.
Ini menjelaskan mengapa Anda tidak bisa mendapatkan perilaku yang Anda inginkan dengan -f
/ --funcall
.
ediff-directories
membutuhkan tiga argumen, jadi perintah yang ditunjukkan di atas berubah menjadi
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
Seperti yang dijelaskan di sini , ediff-directories
menyebabkan Emacs masuk ediff-meta-mode
, jadi Anda akan masuk ke "Panel Kelompok Ediff" terlebih dahulu. Dari manual Ediff di Session Groups :
Beberapa entri utama Ediff melakukan perbandingan dan penggabungan pada direktori. Saat memasukkan ediff-directories
,, ediff-directories3
[...] pengguna disajikan dengan buffer Dired-like yang mencantumkan file-file umum ke direktori yang terlibat beserta ukurannya. [...] Kami menyebutnya buffer Session Group Panel ini karena semua sesi Ediff yang terkait dengan file yang terdaftar akan memiliki buffer ini sebagai titik fokus umum. [...]
Dalam perbandingan direktori atau penggabungan, panel grup sesi hanya menampilkan file yang umum untuk semua direktori yang terlibat. Perbedaan disimpan dalam buffer perbedaan direktori terpisah dan mudah ditampilkan dengan mengetik Dke panel grup sesi yang sesuai. [...]
Jadi untuk menampilkan diff yang sebenarnya, tekan saja D( ediff-show-dir-diffs
).