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
).
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
berfungsi dengan baik.D
(ediff-show-dir-diffs
).*** No differences ***
, meskipun saya meminta ediff dari dalam emacs dengan Mx, semuanya berfungsi seperti yang diharapkan (yaitu, perbedaan ditampilkan). Mungkin saya memiliki sesuatu yang diatur secara berbeda di .emacs saya.Saya menggunakan skrip berikut: ia memeriksa terlebih dahulu jika ada perbedaan, dan jika ada, itu membuka Emacs dengan fungsi yang sesuai dievaluasi. Dengan
-d
opsi ini, diasumsikan item yang disediakan adalah direktori, danediff-directories
bukannyaediff-files
digunakan; selain itu memeriksa apakah mereka adalah direktori atau file, dan mengatur fungsi untuk digunakan sesuai.Karena memeriksa apakah ada perbedaan di muka, saya merasa sangat berguna ketika membandingkan banyak file di folder yang berbeda, dari baris perintah, daripada menjalankan satu sesi diff tunggal di folder induk. Misalnya untuk membandingkan folder A dan B, dan menyalin file yang tidak ada dari yang pertama ke yang lain ...
sumber