我想检查某些(例如当前)缓冲区是否正在访问文件。我可以说:
(if (buffer-file-name) ...)
但它似乎不是很优雅-我感兴趣的只是布尔值,而不是相关缓冲区的实际名称。如果该buffer-file-name
函数是用Elisp编写的,我可以查看其源代码以查明它的用途-但它是用C编写的,尽管我可以安装Emacs源代码,但恐怕找不到一个elisp名称。该功能可以检查我到底在哪里。
我需要的是我想根据当前缓冲区的文件名创建一个目录,目前我正在或多或少地这样做:
(make-directory (if (buffer-file-name) (file-name-base) "default-dir"))
那么,Elisp惯用的方式是什么呢?
(and (buffer-file-name) t)
看起来很奇怪。
(if (buffer-file-name) ... )
很优雅,那么您已经很长时间没有使用elisp进行编码了。从这里只会变得更难看。
buffer-file-name
真正的方法,这是正确的方法(如果您确实想t
要这样做(and (buffer-file-name) t)
,那就是更丑陋的IMO)。它的实现是读取filename
缓冲区C结构的字段,但无论如何都不能直接从Elisp访问。最后,它只是一个为空或不为空的指针。