[migemo] migemo-get-patternのタイムアウト

URA Takefumi hage at power.email.ne.jp
Sun Oct 10 22:56:38 JST 2004


はじめまして、浦といいます。

migemoはEmacsやw3mで便利に使わせて貰っています。

さて、本題です。末尾にパッチをつけましたが、このように直していただくこと
はできませんでしょうか。

実はEmacs上でmigemoを使うと1文字打つたびに10秒近く待たされるんです。もう
何年も前からこうでした。cmigemoを使ってみたところ一応解消したんで、その
まま使っていたんです。先日それを思い出し、原因を究明してみようかと思って
cvsからmigemoを持ってきて遊んでみました。

で、*scratch*で

(progn
  (migemo-get-pattern "a")
  (migemo-get-pattern "as")
  (migemo-get-pattern "asa")
  (migemo-get-pattern "asay")
  (migemo-get-pattern "asaya")
  (migemo-get-pattern "asayak")
  (migemo-get-pattern "asayake"))

を評価してみると、migemoで待たされるのと同じような感じになりました。それ
ぞれのmigemo-get-patternの間に(wait-for 0 100)を入れるとほぼ瞬時に戻って
きます。そこで、migemo-get-patternをもう一度見てみるとwhileでループしな
がらmigemoからの結果を待ってる部分があって、そこでmigemo-get-patternをも
う一度よく見てみると

  (accept-process-output migemo-process 0 5)

というのがありました。こいつの5を100に書き換えてみたところスカスカ動くよ
うになりました。

ならばここの値をmigemo.el本体を書き直すのではなくカスタマイズ可能にして
おけば~/.emacsで制御できるなあ、と思い以下のパッチを作ってみたんです。

私の環境はFreeBSDでして、migemoはportsから入れています。なのでmigemo.el
を書き換えるわけにはいかないんです(といいつつ書き換えちゃいましたけど)。

defcustomは見よう見まねですし、docstringも適当です。すみません。

Index: migemo.el.in
===================================================================
RCS file: /cvsroot/migemo/migemo/migemo.el.in,v
retrieving revision 1.4
diff -c -r1.4 migemo.el.in
*** migemo.el.in	6 Oct 2004 10:29:31 -0000	1.4
--- migemo.el.in	10 Oct 2004 13:08:23 -0000
***************
*** 134,139 ****
--- 134,144 ----
    :group 'migemo
    :type 'file)
  
+ (defcustom migemo-accept-process-output-timeout-msec 5
+   "*Timeout of migemo process communication."
+   :group 'migemo
+   :type 'integer)
+ 
  (defconst migemo-mw32-input-method (and (featurep 'meadow) "MW32-IME")
    "Support \"MW32-IME\" for Meadow.")
  
***************
*** 237,243 ****
  		(process-send-string migemo-process (concat word "\n"))
  		(while (not (and (> (point-max) 1)
  				 (eq (char-after (1- (point-max))) ?\n)))
! 		  (accept-process-output migemo-process 0 5))
  		(setq pattern (buffer-substring (point-min) (1- (point-max)))))
  	      (when (and (memq system-type '(windows-nt OS/2 emx))
  			 (> (length pattern) 1)
--- 242,248 ----
  		(process-send-string migemo-process (concat word "\n"))
  		(while (not (and (> (point-max) 1)
  				 (eq (char-after (1- (point-max))) ?\n)))
! 		  (accept-process-output migemo-process 0 migemo-accept-process-output-timeout-msec))
  		(setq pattern (buffer-substring (point-min) (1- (point-max)))))
  	      (when (and (memq system-type '(windows-nt OS/2 emx))
  			 (> (length pattern) 1)

--
浦 岳史 (うら たけふみ)
    mailto:hage at power.email.ne.jp




Migemo メーリングリストの案内