一部の(たとえば、現在の)バッファがファイルを訪問しているかどうかを確認したいと思います。私は言うことができます:
(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
とにかくElispから直接アクセスできないバッファC構造体のフィールドを読み取っています。結局のところ、それはnullかそうでないかの単なるポインタです。