changeset 58:4d087b06929a v20080827

*** empty log message ***
author gongo
date Wed, 27 Aug 2008 17:29:27 +0900
parents 91236a2c6e2d
children 04eb9d562e60
files ChangeLog redit-client-sm.el
diffstat 2 files changed, 20 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Aug 27 16:06:20 2008 +0900
+++ b/ChangeLog	Wed Aug 27 17:29:27 2008 +0900
@@ -1,5 +1,12 @@
 2008-08-27  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>
 
+	* redit-client-sm.el (redit-client-after-change-function): 
+	下の変更により、ここでは SessionInfo から prev を取得している
+
+	* redit-client-sm.el (defstruct SessionInfo):
+	Session 毎(つまりバッファ毎)に previous-edited-line の保持が必要
+	ってことで SessionInfo に追加
+
 	* redit-client-sm.el (redit-client-after-change-function): memo
 	insert/delete 発行判別の説明
 
--- a/redit-client-sm.el	Wed Aug 27 16:06:20 2008 +0900
+++ b/redit-client-sm.el	Wed Aug 27 17:29:27 2008 +0900
@@ -183,7 +183,7 @@
 ;; eid: Editor ID
 ;; send_cmdlist: rep_command list from user to SessionManager
 ;; recv_cmdlist: rep_command list from SessionManager to user
-(defstruct SessionInfo (sid nil) (eid nil)
+(defstruct SessionInfo (sid nil) (eid nil) (prevline 1)
   (send_cmdlist nil) (recv_cmdlist nil))
 
 ;; create and initialize
@@ -612,11 +612,13 @@
 ;; begin と end には変更後の変更部分の始まりと終わりの point が入る
 (defun redit-client-after-change-function (begin end length)
   ;; (message "after-change-function")
-  (let ((endl) (cur-max-line) (max-line-diff) (prev-edit-line))
+  (let ((endl) (cur-max-line) (max-line-diff) (prev-edit-line) (sinfo))
     (setq redit-client-after-begin-line (real-count-lines begin))
     (setq redit-client-after-end-line (real-count-lines end))
     (setq cur-max-line (real-count-lines (point-max)))
-    (setq prev-edit-line redit-client-previous-edited-line)
+    ;;(setq prev-edit-line redit-client-previous-edited-line)
+    (setq sinfo (redit-sinfo-get-buf2sinfo (buffer-name)))
+    (setq prev-edit-line (SessionInfo-prevline sinfo))
 
     ;; 詳しくは ChangeLog [2008-08-27] を見て
     (if (= redit-client-before-begin-line
@@ -626,10 +628,8 @@
 	       redit-client-before-end-line)
 	    ;; 前回編集した所と違う行を編集していれば、
 	    ;; 前回編集した行を insert する
-	    (if (not (= redit-client-after-end-line
-			redit-client-previous-edited-line))
-		(redit-client-insert-line
-		 redit-client-previous-edited-line nil))
+	    (if (not (= redit-client-after-end-line prev-edit-line))
+		(redit-client-insert-line prev-edit-line nil))
 	  (progn
 	    ;; 行の削除が行われた
 	    (setq endl redit-client-before-end-line)
@@ -661,8 +661,10 @@
 	  (redit-client-insert-line endl nil)
 	  (setq endl (1- endl))))
       )
-    
-    (setq redit-client-previous-edited-line redit-client-after-end-line)))
+
+    ;;(setq redit-client-previous-edited-line redit-client-after-end-line)
+    (setf (SessionInfo-prevline sinfo) redit-client-after-end-line)
+))
 
 ;; 引き数で与えられた string (line_num + text_data) から
 ;; 指定された行を削除し、そこに text_data を挿入する
@@ -809,10 +811,11 @@
     (redit-sinfo-add-buf2sinfo bufname sinfo)
 
     (switch-to-buffer bufname)
-    
+
     (message (format "join-ack: Session [%d] %s"
 		     redit-client-session-id bufname))
     (message (format "Your editor id = %d" redit-client-editor-id))
+
 ))
 
 ;; //引き数で与えられた string から Session IDを取得する