[xyzzy:06324] Re: 初めまして and 添削願い
- Subject: [xyzzy:06324] Re: 初めまして and 添削願い
- From: KAMEI Tetsuya <kamei@xxxxxxxxxxxx>
- X-mailer: KaMail-0.0.2.4[01/03/07] on xyzzy-0.2.1.185 (windows-nt)
- X-yzzy-version: 0.2.1.185
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