Tôi muốn kiểm tra xem một số bộ đệm (giả sử, hiện tại) có đang truy cập một tệp hay không. Tôi có thể nói:
(if (buffer-file-name) ...)
nhưng nó có vẻ không thanh lịch lắm - điều tôi quan tâm chỉ là giá trị boolean, không phải tên thật của bộ đệm trong câu hỏi. Nếu buffer-file-name
hàm được viết bằng Elisp, tôi có thể xem xét nguồn của nó để tìm hiểu xem nó sử dụng cái gì - nhưng nó được viết bằng C, và trong khi tôi có thể cài đặt các nguồn Emacs, tôi sợ rằng tôi sẽ không tìm thấy tên elisp cho chức năng kiểm tra những gì tôi sau đó dù sao đi nữa.
Những gì tôi cần là tôi muốn tạo một thư mục dựa trên tên của tệp bộ đệm hiện tại và hiện tại tôi đang thực hiện ít nhiều điều này:
(make-directory (if (buffer-file-name) (file-name-base) "default-dir"))
Vì vậy, cách Elisp-idiomatic để làm điều này là gì?
(and (buffer-file-name) t)
trông lạ.
(if (buffer-file-name) ... )
là thanh lịch, thì bạn đã không được mã hóa trong thời gian dài. Nó chỉ trở nên xấu hơn từ đây.
buffer-file-name
thực sự, đó là cách đúng đắn để làm điều đó (nếu bạn thực sự muốnt
, hãy làm(and (buffer-file-name) t)
nhưng đó là IMO xấu hơn). Việc thực hiện của nó là đọcfilename
trường của cấu trúc đệm C, dù sao không thể truy cập trực tiếp từ Elisp. Cuối cùng, nó chỉ là một con trỏ là null hoặc không.