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

[xyzzy:04507] Re: cvs-mode



なかだです。

At Thu, 11 May 2000 11:23:02 +0900,
KAMEI Tetsuya <kamei@xxxxxxxxxxxx> wrote:
> | (add-hook '*find-file-hooks* 'cvs::open-file)
> | 
> | という風にしてみたんですが、効果ありません。フックの使い方が間
> | 違ってるんでしょうか。
> 
> すいません。find-file から *find-file-hooks* を呼ぶタ
> イミングが間違ってます。フックが呼ばれた時点では、読み
> 込んだバッファがカレントになってません。

  なるほど、たしかに。

> そのうち直します。

  とりあえずこんなとこで逃げておくことにしました。


--- files.l.orig	Tue Feb  1 22:34:31 2000
+++ files.l	Fri May 12 01:12:56 2000
@@ -169,7 +169,9 @@
 		(or nomsg
 		    (message "新しいファイルです")))))
 	  (set-auto-mode last-buffer))))
-    (mapcan 'funcall *find-file-hooks*)
+    (save-excursion
+      (set-buffer buffer)
+      (mapcan 'funcall *find-file-hooks*))
     buffer))
 
 (defun find-file (filename &optional encoding nomsg)


  と、ついでにさらに質問(^^;ですが、

(1) ファイルを保存したときになんかする、っていうのは何か方法あ
    りますか? elisp なら after-save-hook みたいなの。
    save-buffer の置き換えしかなし?

    C++ レベルなら Buffer::save() をオーバーライドして、とかか
    なと思ったんですが、でもそれだとバッファのクラス自体を変え
    なきゃならなくなるし、やっぱり不便だ。> C++

    ていうか、lisp でサブクラス化とかメソッドのオーバーライドと
    かってできればと思いましたが、それだと CLOS とか Scheme に
    なっちゃうんでしょうか。いやどっちも使ったことないんで分か
    りませんが。

(2) keymap について、こんな風にしてみたんですが、minor-mode で
    のうまい手ってないでしょうか。

    コメントアウトした部分のようなことができるといいんですが、
    これは現時点においての sparse keymap に対してしか使えません
    し、これでもやはり他のところで同じようなことをされると分か
    らなくなるし…。

    いっそ global/local keymap ではなく keymap のリストを持つよ
    うにするとか。

      (defun cvs::set-key ()
        (interactive)
        (let ((map (copy-keymap (local-keymap))))
      ;      ((map (make-sparse-keymap)))
      ;    (setf (cdr (last map)) (local-keymap))
          (mapcar #'(lambda (k) (define-key map k cvs::mode-map))
      	    cvs::keymap-prefixes)
          (use-keymap map)))

Index Home