[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