[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bep] ファイルを結合するマクロ(learning lisp)



Koichi INOUE writes:

>>  append-buffer-to-file で指定したファイル名のバッファがすでに開かれてい
>> たら、その時点で警告を出すように書き直すことは可能ですか?
>> その場合、ディスク上のファイルを更新することをユーザが選択したら、バッフ
>> ァはkillするか、更新結果を読み込むか……ですよね。自動的に読み込めたほう
>> がおもしろいかな。

> これ私には1時間くらい調べないと分かりません。(^^;)

ファイルがすでに開かれているか否かを、ファイル名だけから調べることがで
きるのかどうかは知りません。シンボリックリンクの場合もありますから、
ちょっと面倒かもしれません。

>> バッファの名前って、どこかの変数(???)に記憶されていますか?

(buffer-list) という関数を引数なしで評価すると、バッファのリストが値と
して返ってきます。「バッファ」のリストであって、「バッファ名」のリスト
ではありません。バッファは Lisp Object の一つです。

> (get-buffer バッファ名)でnil以外が帰ってきたらそういうバッファが存在す
> ることは分かると思うのですが、たぶん存在するバッファの名前のリストを得
> る関数もあると思います。
> 後、バッファの名前とそのバッファが関連づけられているファイルの名前は必
> ずしも一致しないので、
> (buffer-file-name)関数を使って調べる必要とかあるかも知れません。

中級編の関数 mapcar を使って一筆書きすると

(defun file-visited-p (filename)
  (member filename
	  (mapcar 'buffer-file-name (buffer-list))))

というところでしょうか。引数の filename は file-truename 関数を使って
正規化 (って言うのかな) しておく必要があります。

# まだリストの説明をちゃんとしてないなー。

-- 
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/