view ChangeLog @ 29:ba1829a0c788

change redit-*-command, rename write -> insert
author gongo
date Sun, 11 Nov 2007 01:44:56 +0900
parents 40626191b1fa
children 9e43cec05dc5
line wrap: on
line source

2007-11-11  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* redit-client-sm.el: redit-*-command
	REPcommand では 「insert」 なのに
	ここでは 「write」 なので、時々混乱する。insert に変更。
	それに総じて、write-* 関数を insert-* 関数にリネーム。
	あと、redit-*-command を使うときに、文字列で定義されてるので

	(string-to-number redit-read-command)

	とかやらないといけない。今日の話し合いで
	「別に文字列である必要はないぜ」ってことで
	全て数値に変更。こっちの方が楽だし、きっと速い。

2007-11-10  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* redit-client-sm.el: set-process-coding-system
	送受信するパケットは binary の方が良いと指摘。
	そう言われれば確かにそうでした。pack/unpackの意味なす
	ってことで 'utf-8 から 'binary に変更しました。

	* redit-client-sm.el: process-send-string 関連
	process-send-string で、以前までは、送るコマンドを

	(format "%10d%10d" sid eid)

	って感じの文字列を生成して出力してましたが、
	これは、通信用の Perl スクリプトに送るためのものでした。
	今は既に、lispから直接 SessionManager にコマンドを送るので、これではだめ。
	前々から使ってたけど、(redit-pack sid eid...) ってのに変更しました。
	引数を何にするかって参考で、一応 obsolete な記述も残してはいますが。
	
	* redit-client-sm.el: redit-select-command (obsolete)
	editor側では select 要らないってことで。
	これで、editor側で必要なのは join, put, quit, その他編集コマンド。

	* add: translate.el
	translate のテストルーチン。使い方は

	M-x load-file RET [translate.el]
	M-x translate-test

	ってやると、*Message* バッファに、
	translateの結果が出力されます。きっと。

	* redit-client-sm.el:unpack-int
	< (setq num (* byte 4))
	<   (string-to-char (substring pkt num (+ num 1)))))
	----------
	> (setq num (* byte 4))
	>   (string-to-char (substring pkt (- num 1) num))))
	通りで、SMからのACKにある
	eid や sid を取得できない訳だ。
	
	* error: redit-put-command
	cmd(redit-put-command, 0, 0, 0, 0, str-length, str)
	みたいに送ると、GUI SessionManager で受け取る文字列が化ける。

	emacs || GUI SessionManager
	------++-------------------
	gongo -> 杯湧

	どっちが原因なのか・・・
	
	* TODO
	送信文字数がバイトとかになるんで

	(length str)

	ぐらいでいけると思ったけど、SMで文字化け。ずれてるんだろうか、
	もしくは単に文字コードの問題?でも送ったの "hoge" なんだわ。
	ま、それは明日にして寝よう (現在AM2:16)

2007-11-09  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* redit-client-sm.el: TCP/IP通信の実装、それに伴うpack/unpack
	久々の更新ですわ。

	open-network-stream を追加してみた。

	redit-join-command()
	< (setq redit-client-process
	<   (start-process "reditclient" nil redit-client-program host))
	-----
	> (setq redit-client-process (open-network-stream
        >                             "redit-client"
	>                             nil
	>                             "localhost"
        >                             8766))

	nil は buffer なんだけど、よくわからんので nil 。多分使わない。きっと。
	localhost/8766 は、何か仕様変更で SM はデーモンで持つらしいので、
	ホスト名/ポート番号 決めうちで。
	ここ変えるだけで、後はプロセスを同じように使えます。


	Perlスクリプトを使わなくなったので、変更点としては
	以前:lisp からREPコマンド"っぽい文字列" -> Perl で文字列受け取って
	      ここでpack->SessionManager へ
	現在:lisp から直接 REPコマンドを -> SessionManagerへ

	ってことで lisp 内で pack/unpack を実装。
	(defun pack-int) (defun pack-int-loop) (defun unpack-int) です。
	もう少しちゃんとやるべきなんだろうか。
	ちゃんと SessionManager で反映されてるので 成功はしてるみたい。偶然?

	
2006-12-26  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* 独り言
	うん、やっぱりpack/unpackの処理はアホだな。
	暫定版で出したんだからしょうがない、って言い訳をしておこう。
	今のところ0〜255までしかできないので、以下のように変更

	;; num   : packする整数
	;; count : byte length
	(defun pack-int-loop (num count)
	  (if (> count 0)
	      (concat
	       (pack-int-loop (/ num 256) (- count 1))
	       (char-to-string (% num 256)))))

	(defun pack-int (num)
	  (pack-int-loop num 4))

	ex. num が 30000、byte length が4(32bit)の時 ('X'=不定)
	;; loop start
	count 4 -> (% num 256) => 48  を1バイト目
	           (/ num 256) => 117 を2バイト目
	XXXXXXXX XXXXXXXX XXXXXXXX 00110000 (0 0   0 48)
	count 3 -> (% num 256) => 117 を2バイト目
	           (/ num 256) =>   0 を3バイト目
	XXXXXXXX XXXXXXXX 01110101 00110000 (0 0 117 48)
	count 2 -> (% num 256) =>   0 を3バイト目
	           (/ num 256) =>   0 を4バイト目
	XXXXXXXX 00000000 01110101 00110000 (0 0   0 48)
	count 1 -> (% num 256) =>   0 を4バイト目
	           (/ num 256) =>   0 を5バイト目
	00000000 00000000 01110101 00110000 (0 0 117 48)
	;; loop end

	これでおkでした。Perl側の unpack でデータ取得できました
	こんな感じでいいのかな。packソース見たい。
	あ〜あとはunpackか。まあ簡単かなpackと同じことすればいいのか。
	int だけでいいのかな。浮動小数とかいやですね。

	
2006-12-24  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* redit-client-sm.el - redit-client-after-change-function ()
	< (progn (redit-client-write-line beginl nil)	;; t)
	-----
	> (progn (redit-client-write-line currline nil)	;; t)
	while でループしてるのに
	ずっとbeginlってのはおかしいかな〜と思った
	
	* 独り言
	pack/unpackもどきができた。まだ使用段階なので組み込んでません。
	- pack
	(defun pack (num) ;; num=42
	    (concat (char-to-string 0)     ;; 4バイト目
	            (char-to-string 0)     ;; 3バイト目
	            (char-to-string 0)     ;; 2バイト目
	            (char-to-string num))) ;; 1バイト目
	=> 00000000 00000000 00000000 00101010

	lispでバイト列を扱うやりかたがよくわからなかったけど
	これでなんとかrep_manager.plが unpack できてました。
	エンディアンとか考える必要あるかな。

	- unpack
	受け取ったデータから、各値(command、eid 、etc...)を取り出す。

	1〜4、5〜8、9〜12、13〜16、17〜20、21〜24
	cmd    sid   eid     seq    line    t_siz

	下位1バイト目(?)に値が入ってるので
	(substring pkt 3 4) => "*" ;; (char-to-string 42) => "*" なので
	(string-to-char "*") => 42 ・・・ 値取得成功!!

	まだまだ見直す所ありそうだけど、
	うまくいけば完全に lisp だけで REP できますね
	
2006-12-15  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* 独り言
	open-network-stream で rep_manager.pl に接続できた。
	だけど、lisp 側で送信データがうまく作れてない。
	(format "%4d%4d%4d%4d%4d%4d" 41 0 0 1 0 0)
	だと、なんかうまくいかない。
	pack/unpackないかな・・・
	
2006-12-14  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* 独り言
	なんか lisp から network に TCP 接続する方法があるっぽい
	(open-network-stream NAME BUFFER HOST SERVICE)
	まだ実証してませんが、なんか使えるっぽいです。(ex. navi-2ch)
	うまくいけば、redit_client.pl はいらなくなるかも。
	文字コード関係はどうしよう。decode-coding-* ぐらいで
	どうにかならないかな。ならないかも。無駄なヘッダ付加される・・・
	
	* redit-client-sm.el - redit-client-close ()
	linenum が定義されてなかったので、 0 にしました。
	別に0で大丈夫ですよね?close だし。多分。。。
	
	* redit-client-sm.el - redit-client-exec-write-line (string)
	なんか Warning でてたので
	< (end-of-buffer)
	-----
	> (call-interactively 'end-of-buffer)

	end-of-buffer は interactive 関数以外で
	呼び出したら駄目らしいです。
	いろいろ調べてたらこれで Warning 出ないので落ち着きました。
	いいのかなこれで。。。
	
2006-12-12  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>

	* redit-client-sm.el
	obsolete function を変更

	since Emacs 22.1
	< (process-kill-without-query redit-client-process)
	-----
	> (set-process-query-on-exit-flag redit-client-process nil)
	第2引数が non-nil だと、emacs終了時に
	「`Active processes exist; kill them and exit anyway?' 」
	って聞いてきます。process は redit_client.pl のことです。
	多分いらないので nil を入れました。

	since Emacs 21.1
	< (make-local-hook 'before-change-functions) ;; afterも
	-----
	> ;; (make-local-hook 'before-change-functions)
	not necessary らしいです。21.1以前だと必須みたいですが。


	* 独り言
	defstruct を使うときは
	(eval-when-compile (require 'cl)) を加えた後に
	byte-compile-file してからやると使える。