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

[xyzzy:06325] Re: 初めまして and 添削願い



亀井さん、ご返事ありがとうございます。


>   ; とりあえず無限ループ
>   (loop
>     ; xf-dir の最後に "/" が無いなら付け加える
>     (setq xf-dir (append-trail-slash xf-dir))
>     ; xf-dir が存在すればループから抜ける
>     (if (file-exist-p xf-dir)
> 	(return))
>     (xf-dir-is-not-found))

とりあえず "/" が無いなら付けておいて、xf-dir が存在するなら return で
loop から抜ける。しないなら xf-dir を入力してもらって loop の先頭へ。
ということですか。append-trail-slash なんてあったんですね。

>   (while (not (file-exist-p xf-dir))
>     (xf-dir-is-not-found))
>   (setq xf-dir (append-trail-slash xf-dir))

file-exist-p は末尾の "/" があろうと無かろうと関係ないから、ってことか
な。よく分からない catch,throw を使ったのが間違いでした。単純にかけるん
ですね。こんなところがいっぱいありそう...

> そういう使い方は想定していないので。ウィンドウを分割し
> て、それ用のバッファに表示するようにしてください。

はい、そうします。

> なんとなく合ってるような気もしますが、以下のようにする
> のが普通です。書き方は他にもいろいろありますが。
> 
>   (let ((a (get-file-attributes x)))
>     (concat (if (zerop (logand a 16)) "-" "D")
> 	    (if (zerop (logand a 32)) "-" "A")
> 	    (if (zerop (logand a 2)) "-" "H")
> 	    (if (zerop (logand a 1)) "-" "R"))))
> 
> ちなみに、get-file-attributes の戻り値は、R:1 H:2 S:4 
> D:16 A:32 を足したものです。

S ってなんだろと思って探したら、ありました。システムファイルですね。表
示しない設定にしてたので見つからないはずです。ってことで、あれは全然違
います。1, 2, 16, 32 しか無いという前提で組み合わせを全部書き出し、それ
を眺めながら書いたので。これをありがたく頂戴いたします。

> (setq xf-table (sort xf-table
> 		     #'(lambda (x y)
> 			 (< (nth 5 x) (nth 5 y)))))
> 
> とか。関数の戻り値を使うようにすると、グローバル変数を
> 使う機会が減ると思いますとか。

うへ〜、短いな。sort というのがあるのは知っていたんですが "#'〜" を使っ
てどう書けばよいのか分からなかったのです。こういうところで lambda を使
うんですか。くしゃくしゃやってたのが恥ずかしい。早速試してみると体感で
5 倍ぐらい早くなりました。
元からある関数を使うときは戻り値ばかり気にしているんですが、自分で書く
ときは全然戻り値を意識してないです。色々見直します。


たくさん答えていただいてありがとうございます。これからも精進します。

Index Home