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-name
fungsi 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-name
benar - 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 membacafilename
bidang buffer C struct, yang toh tidak dapat diakses langsung dari Elisp. Pada akhirnya, itu hanya sebuah pointer yang bernilai null atau tidak.