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

[xyzzy:08440] Re: 終了状態復元とcvs-mode



なかだです。

At Sun, 15 Sep 2002 14:49:31 +0900,
IWATSUKI Hiroyuki wrote:
> (defun cvs-reload ()
>   (cvs-reload-run (buffer-list)))
> (defun cvs-reload-run (list)
>   (let ((buffer (car list)))
>     (if (not (null buffer))
> 	(progn
> 	  (set-buffer buffer)
> 	  (cvs:cvs-mode)
> 	  (cvs-reload-run (cdr list))))))
> (add-hook '*post-startup-hook* 'cvs-reload)
> 
> あと、hookのタイミングを出来るだけ遅くした方が良いかな、と根拠無
> く思ってしまいまして*post-startup-hook*にしました。なおこのフッ
> ク変数と起動時の挙動につきましては大久保さんのサイトにあります
> xyzzy Referenceにて調べました。ありがとうございました。

確かにresumeに関してはこれでうまく行くのですが、load-sessionの
後では*post-startup-hook*は呼ばれないのでうまく行きません。

実際には、resumeされたときにも*find-file-hooks*に登録した
cvs::open-fileによってcvs-modeに入っているのですが、その後
major-modeをセットするところでクリアされているようです。

どちらかというと、session.lのほうでminor-modeも考慮してもらった
ほうがいいような気がします。


--- lisp/session.l.orig	Sun Apr 15 19:46:40 2001
+++ lisp/session.l	Sun Sep 15 18:07:52 2002
@@ -58,4 +58,13 @@
 	(cadddr conf)))
 
+(defun buffer-mode-list ()
+  (let ((list (cons buffer-mode nil)))
+    (dolist (var *minor-mode-alist*)
+      (and (symbolp (setq var (car var)))
+	   (boundp var)
+	   (eval var)
+	   (setq list (cons var list))))
+    (if (cdr list) (nreverse list) (car list))))
+
 (defun list-buffer-info ()
   (save-excursion
@@ -66,5 +75,5 @@
 		  (push (list (get-buffer-file-name buffer)
 			      (point)
-			      buffer-mode
+			      (buffer-mode-list)
 			      (mapcar #'(lambda (var)
 					  (and (symbolp var)
@@ -79,11 +88,17 @@
   (let ((obuffer (selected-buffer)))
     (mapc #'(lambda (i)
-	      (let ((f (pop i)))
+	      (let ((f (pop i)) buf)
 		(when (file-exist-p f)
 		  (handler-case
 		      (progn
-			(find-file f)
+			(setq buf (create-file-buffer f))
+			(set-buffer buf)
+			(find-file-readin f nil nil)
 			(goto-char (pop i))
-			(and (fboundp (setq f (pop i))) (funcall f))
+			(setq f (pop i))
+			(cond ((listp f)
+			       (dolist (f f)
+				 (if (fboundp f) (funcall f))))
+			      ((fboundp f) (funcall f)))
 			(mapc #'(lambda (x)
 				  (when (and (car x) (symbolp (car x)))


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

Index Home