[xyzzy:00028] 亀井さんヘルプ !!
- Subject: [xyzzy:00028] 亀井さんヘルプ !!
- From: Masahito Henmi <henmi@xxxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
亀井さん、こんにちは。逸見です。ヘルプ!!
2つのディレクトリを比較するマクロを書いています。
(defun dir-diff (dir1 dir2)
(let* ((lst (directory (merge-pathnames "*" dir1) :recursive t :file-only t))
file1 file2 time1 time2
(kekka nil))
(dolist (i lst)
(setq file1 (merge-pathnames i dir1))
(setq file2 (merge-pathnames i dir2))
(setq time1 (file-write-time file1))
(setq time2 (file-write-time file2))
(if (file-exist-p file2)
(cond ((> time1 time2) (push (list '> i time1 i time2) kekka))
((< time1 time2) (push (list '< i time1 i time2) kekka))
(t (push (list '= i time1 i time2) kekka)))
(push (list '! i time1 "なし" 0) kekka))
)
kekka
)
)
(defun universal-time->str (x)
(multiple-value-bind
(ss mm hh dd mo yy)
(decode-universal-time x)
(format nil "~4,'0d/~2,'0d/~2,'0d ~2,'0d:~2,'0d:~2,'0d" yy mo dd hh mm ss)
)
)
;;
;;
;;
(defun show-dir-diff (dir1 dir2)
(interactive "sDir1 : \nsDir2 : ")
(let ((ans (dir-diff dir1 dir2)))
(with-output-to-temp-buffer ("*Help*")
(format t " ~30@A ~20@A ~30@A ~20@A~%" dir1 "" dir2 "")
(format t "----------------------------------------------------------------------------------------------------------~%")
(dolist (i ans)
(format t "~s ~30@A ~20@A, ~30@A ~20@A~%"
(car i)
(cadr i) (universal-time->str (caddr i))
(cadddr i) (universal-time->str (car (cddddr i)))))
)
)
; (switch-to-buffer "*Help*")
)
使い方
M-x show-dir-diff
実行結果・・・こんなんができる
c:/@xyz.58/xyzzy/lisp c:/@xyz.59/xyzzy/lisp
----------------------------------------------------------------------------------------------------------
= wip/winapi.lc 1998/07/02 01:29:04, wip/winapi.lc 1998/07/02 01:29:04
= wip/winapi.l 1998/07/02 01:29:02, wip/winapi.l 1998/07/02 01:29:02
= wip/turtle.lc 1997/12/30 08:48:38, wip/turtle.lc 1997/12/30 08:48:38
= wip/turtle.l 1997/12/30 08:48:34, wip/turtle.l 1997/12/30 08:48:34
↑
タイムスタンプを比較して = か < か > で表示するのだ。
質問1:
(interactive "sDir1 : \nsDir2 : ")
今文字列でやっているんですが、ディレクトリってありましたっけ?
質問2:
バッファーをソートするってありましたっけ?
(先頭文字でソートしたい)
変な現象
*scratch* から Ctrl-Jで実行すると "*help*" が開かないよーー
(show-dir-diff "c:/@xyz.58/xyzzy/lisp/" "c:/@xyz.59/xyzzy/lisp/") C-j
毎度変な質問ばっかりで、すみません m(. .)m
------------------------------------------------------------
逸見雅人 Email henmi@xxxxxxxxxxxxx
Masahito Henmi