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

[xyzzy:00028] 亀井さんヘルプ !!



亀井さん、こんにちは。逸見です。ヘルプ!!

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

Index Home