Bisakah saya mengatur file tertentu untuk secara otomatis dan diam-diam menerima perubahan?

9

Yaitu, dapatkah saya menentukan file tertentu yang saya tidak ingin Emacs memberi tahu saya bahwa file telah berubah pada disk dan meminta saya tentang apakah saya ingin menerima perubahan atau tidak? Saya tidak ingin melakukan ini secara global, hanya untuk file yang saya tahu akan sering diubah di luar Emacs (khususnya, file Org yang berhubungan dengan kalender).

emacsomancer
sumber

Jawaban:

8

Anda dapat melakukan ini untuk buffer tertentu dengan M-x auto-revert-mode( manual ). Untuk buffer file, ini akan memeriksa setiap auto-revert-intervaldetik (default ke 5) untuk perubahan dan memperbarui buffer dari disk secara otomatis.

Judul Anda mengatakan "file tertentu" sementara tubuh pertanyaan Anda menyebutkan jenis file (file org). Tergantung pada keadaan Anda, berikut adalah beberapa cara Anda dapat mengatur mode ini untuk mendapatkan efek yang diinginkan secara terus-menerus. Metode sebelumnya bisa dibilang lebih bersih dan lebih efisien jika diterapkan pada use case khusus Anda.

Jika Anda tahu Anda menginginkan ini untuk setiap file dari jenis tertentu, pertimbangkan untuk menambahkan pengait mode ke pengaturan init Anda.

(add-hook 'org-mode-hook (lambda () (auto-revert-mode 1)))

Jika Anda tahu Anda menginginkannya untuk semua yang ada di direktori tertentu, pertimbangkan untuk mengaturnya di .dir-locals.el di lokasi yang relevan, pastikan untuk VCS - abaikan file pengaturan lokal jika sesuai. Contoh ini akan berlaku untuk semua buffer mode-org untuk file di bawah direktori yang sama (dan subdirektori). Anda juga dapat menjalankan M-x add-dir-local-variableagar Emacs menghasilkan dan menyimpannya untuk Anda secara otomatis.

(
  (org-mode . ((auto-revert-mode . 1)))
 )

Jika tak satu pun dari kedua pendekatan di atas bekerja dengan baik untuk Anda, pertimbangkan variabel file lokal yang disetel di setiap file. Cara terpendek dan paling umum untuk menetapkan ini adalah dengan memasukkan yang berikut di baris pertama dari file target:

-*- eval: (auto-revert-mode 1); -*-

Dalam file sumber, teks dapat mengikuti pembatas komentar (//, #, dll). Anda dapat menjalankan M-x add-file-local-variable-proplineagar Emacs menghasilkan ini untuk Anda secara otomatis, atau M-x add-file-local-variableuntuk format yang menggunakan bagian bawah file Anda, bukan bagian atas.

Gunakan metode ini hanya jika Anda tidak berbagi file dengan orang lain. Dari manual GNU :

Seringkali kesalahan untuk menentukan mode minor dengan cara ini. Mode minor mewakili preferensi pengguna individu, dan mungkin tidak pantas untuk memaksakan preferensi Anda pada pengguna lain yang mungkin mengedit file. Jika Anda ingin secara otomatis mengaktifkan atau menonaktifkan mode minor dengan cara yang bergantung pada situasi, sering kali lebih baik melakukannya dalam mode hook utama.

Mian
sumber
2
Bukankah (auto-revert-mode 1)cara kanonik untuk mengaktifkan mode minor, bukan setq?
mbork
1
Ya kau benar. Membersihkan contoh itu dalam satu detik. Terima kasih.
Mian
1
Sama-sama. (Yang mengatakan, AFAIU, mengajukan variabel lokal paling cocok untuk kasus penggunaan OP.)
mbork
1
Kamu mungkin benar. IMO itu tergantung pada detail organisasi file mereka. Jika file yang mereka tahu akan sering diubah di luar emacs adalah semua file org, atau semua berada di tempat yang sama (misalnya direktori Dropbox), pendekatan berbasis mode atau direktori bisa lebih bersih dan lebih mudah, dan akan menghindari mengacaukan file mereka sebagai bonus.
Mian
2
Untuk berinteraksi dengan kedua metode ini, ada add-file-local-variabledan add-dir-local-variable.
Sean Allred
3

Iya. Letakkan ini di akhir file Anda.

* COMMENT Config
Local Variables:
eval: (auto-revert-mode 1)
End:

Ini mengasumsikan mode-Org, untuk mode lain gunakan komentar dalam bahasa yang digunakan seperti yang dijelaskan dalam tautan yang diberikan di bawah ini.

Catatan: lihat Variabel Lokal dalam File di manual untuk latar belakang, informasi keselamatan dan peringatan bahwa ini mungkin tidak selalu merupakan ide yang baik. Juga, bagian pada reverting mengatakan misalnya bagaimana mengubah default, interval 5 detik untuk auto-reverting.

mbork
sumber
Apakah ini benar-benar harus pada akhirnya? Saya memiliki skrip yang menghasilkan file .org dan saya meletakkannya di dekat permulaan - yang sepertinya tidak berfungsi ....
emacsomancer
1
Ya, lihat tautannya. Dan lihat jawaban lain untuk solusi lini pertama.
mbork