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

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



quarto さん、こんにちは。

	2001年3月10日(土)[13:59:51]の、
	[xyzzy:06322] 初めまして and 添削願い
	への返事です。

> 1. xf-reload の最初で、

throw は catch の頭に戻るのではなく、catch ブロックか
ら抜けるものなので、そのような動作になります。
xf-dir-is-not-found で throw しないで、呼び出す方がル
ープしてやれば、望む結果が得られます。こんな感じ。

  ; とりあえず無限ループ
  (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))

順序を入れ替えて、こうした方がスマートかも。

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

> 2. minibuffer って 1 行分しか使えないんですか ? ミニバッファをがばっと
> 広げて色々使おうと思っているんですが、

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

> 3. 属性を調べているところ (xf-get-file-attr) ですが、そもそもこの結果は
> 正しいのでしょうか。logand #xfff のやっていることがわかんないです。

なんとなく合ってるような気もしますが、以下のようにする
のが普通です。書き方は他にもいろいろありますが。

  (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 を足したものです。

> ほかにも外部変数と局所変数の使い分け、ソートの馬鹿さ加減など気になると
> ころがあるので、問題点を教えてもらえるとありがたいです。

(setq xf-table (sort xf-table
		     #'(lambda (x y)
			 (< (nth 5 x) (nth 5 y)))))

とか。関数の戻り値を使うようにすると、グローバル変数を
使う機会が減ると思いますとか。

-- 
亀井哲弥(Tetsuya Kamei)
kamei@xxxxxxxxxxxx

Index Home