Saya ingin memeriksa apakah beberapa (misalnya, saat ini) buffer mengunjungi file atau tidak. Saya bisa mengatakan:
(if (buffer-file-name) ...)
tetapi tampaknya tidak terlalu elegan - yang saya tertarik hanyalah nilai boolean, bukan nama sebenarnya dari buffer yang dimaksud. Jika buffer-file-namefungsi tersebut ditulis dalam Elisp, saya dapat melihat ke sumbernya untuk mengetahui apa yang digunakan - tetapi ditulis dalam C, dan sementara saya dapat menginstal sumber Emacs, saya takut bahwa saya tidak akan menemukan nama elisp untuk fungsi yang memeriksa apa yang saya cari setelah itu.
Yang saya butuhkan adalah saya ingin membuat direktori berdasarkan nama file buffer saat ini, dan saat ini saya melakukan lebih atau kurang ini:
(make-directory (if (buffer-file-name) (file-name-base) "default-dir"))
Jadi, apa cara Elisp-idiomatis untuk melakukan ini?
(and (buffer-file-name) t)terlihat aneh.
(if (buffer-file-name) ... )elegan, maka Anda belum lama mengkode di elisp. Hanya mendapat lebih buruk dari sini.
buffer-file-namebenar - benar, itu cara yang tepat untuk melakukannya (jika Anda benar-benar ingint, lakukan(and (buffer-file-name) t)tapi itu IMO lebih buruk). Implementasinya adalah membacafilenamebidang buffer C struct, yang toh tidak dapat diakses langsung dari Elisp. Pada akhirnya, itu hanya sebuah pointer yang bernilai null atau tidak.