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

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



 r高橋です。

Reply TAKAHASHI Naoto <ntakahas@...>'s message:

} (file-exists-p filename) は、filename という名前のファイルかディレクト
} リが存在すれば t を返しますが、それがファイルなのかディレクトリなのか
} まではわかりません。

 そうでした! この件については、もうわかったと思います。というか、どう
してわからなかったのかがわからなくなってしまいました……。
(not (file-exists-p filename)) が nil になったとき、ディスク上には、今書
き込もうとしているのと同じ名前のファイルかディレクトリが存在する。
だから、そのファイルが書き込み可能で(file-writable-p)、かつ「ファイル」
になれること(file-regular-p)を確かめなければならないんですね。

}   (not (file-exists-p "/i/have/never/seen/such/a/file/or/directory"))

 t になりました。で、「あっ、だとすると、こういうファイル名が指定された
らエラーになっちゃう……」と思ったら、しっかり対処の方法があったんですね
! 昨日の午後電車の中で考えていたけれど、もうぐちゃぐちゃで私には↓は全
然思いつけませんでした。


Reply Koichi INOUE <inoue@...>'s message:

} TAKAHASHI Naoto <ntakahas@...> writes:
} 
} > 書き込めないディレクトリの下にまだ存在していないファイル名を指定すると
} > 失敗しませんか?  たとえばファイル名として CD-ROM ドライブの中を指定す
} > るとか。
} 
} 確かにそうでした。
} 
} (and (file-writable-p filename)
}      (or (not (file-exists-p filename))
}          (file-regular-p filename)))
} 
} かなあ。

 調べる順番というか、調べ方をちょっと変えてみると解決できちゃうことって
あるんですね! こんなふうに思いつけるだなんてすごいと思います。やっぱり、
Lispっておもしろいかもしれない。

 ↑は、ファイルが書き込み可能であることが必須条件になって、かつ、ディス
ク上に存在しないこと(だからディレクトリと重なってしまう心配はない)、あ
るいはファイル名であること(ディレクトリ名ではないこと?)を確かめている
んですよね?
あっ、でも……、どうして (not (file-exists-p filename)) を確かめなければ
ならないんでしたっけ……?(ええん、まだわかってない(^^;))


Reply TAKAHASHI Naoto <ntakahas@...>'s message:

} あるファイルを Emacs で開いた後に、元のファイルに別のプロセスが書き込
} みを行ったような場合ですか?  それならもちろん矛盾が生じます。
} 
} もし Emacs のバッファの方で修正を行っていないなら、C-x C-v RET でバッ
} ファの内容をファイルの現状に合わせることができます。

 これは、「再読み込み」のようなものでしょうか?

Reply Koichi INOUE <inoue@...>'s message:

} C-x C-f ~/appfile RET
} M-x info
} M-x append-buffer-to-file RET
} ~/appfile RET
} のようにすると、appfileバッファは空のままで、ここになにか入力しようと
} すると、ディスク上のファイルが更新されているけど読み直すかという警告が
} 出ますね。
} そもそものappend-buffer-to-fileの仕様がまずかったのかな。
} まあ今のところ用は足りるし上記のメッセージが出たとき読み直させればいい
} のでOKっぽいですけど。

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

 あと、もう一つ、書き込めないファイル名を指定したら「書き込めません」の
ようなメッセージを出してからループ(?)するようにしたいのですが……、これは、
(print ...)を使えばいいですか?

 全体を、(while)を使って書き直してみようと思っています。

 「こういうことができる関数ってないのかな?」と思った場合、どうやって探
したらいいですか? たぶん、今の私だと、説明を読んでもほとんどわからない
とは思うのですが。


**-***-***-***-***-***-***-***-***-***-***-***-**
           Reiko TAKAHASHI  (高橋玲子)
         E-mail:  HFC03614@...
         ICQ UIN: 85924121  (Twinkle)
**-***-***-***-***-***-***-***-***-***-***-***-**