[Mew-dist 08845] Re: b26

Shun-ichi GOTO gotoh at example.com
1999年 5月 19日 (水) 04:04:55 JST


後藤@太陽計測です

>>>>> at Mon, 17 May 1999 13:26:53 +0900, kazz <kazu at example.com> said,
kazz> ようやく info を書き上げましたので、Mew 1.94b26 をリリースします。

#b26以前からあったコトであはりますが、、、

mewのコードのいくつかの個所で、 re-search-{forward,backward}の第3引数
NOERRORを指定しないで使用しているようですね。

これはerror signalを利用した脱出のつもりなのか、単なる実装ミスなのか定か
ではないですが、(condition-caseでくくってerrorをトラップする場合以外で
は)こういった利用は好ましくないと思うのですがいかがでしょうか。

ちなみにmew-1.94b26では以下の個所が該当します。
#ファイル名と @行番号 と関数です

---------------------------------
mew-attach.el
@127 mew-attach-move-onto-file
@211 mew-attach-goto-number
@221 mew-attach-goto-number

mew-decode.el
@565 mew-decode-multipart-encrypted
@570 mew-decode-multipart-encrypted
@661 mew-decode-multipart-signed

mew-mark.el
@56 mew-mark-unmark
@97 mew-summary-mark-as

mew-summary.el
@1679 mew-summary-save
@1684 mew-summary-save

mew-syntax.el
@409 mew-encode-syntax-print
@411 mew-encode-syntax-print

---------------------------------

とりあえず、本題はここまでで、第3引数をつけようよという提案でした。


で、そもそもこれが問題となったのは、Meadow-1.04 alpha1 (based on emacs
20.3.8)でMewを使用しているとき、summaryバッファからmessageをforwardしよ
うとすると、Emacsがハングアップしたようになってしまうという現象が発生し
たためです。

実際にはハングアップではなく、Meadow-1.04 alpha1 の(本質的にはEmacs-20.3
の)不具合のために inhibit-redisplay が tの状態でデバッガに入ってしまうた
め、キー入力は受け付けるが画面再描画が行われない状態となってしまうのでし
た。ただし(setq debug-on-error t)の場合の話しです。

これは emacs-20.3.8などで以下のコードを実行することでUNIX上のEmacs 20.3.8
and 20.3.9 でも再現できるとのことです。
#実際に実行するときは末尾の復帰方法にも目を通しておいてください。

>>>>> at 15 May 1999 16:01:02 +0900
>>>>> himi <himi at example.com> said,
> はい、Menuのkeymap評価のために elispを評価しますが、こいつが
> バグっていると、inhibit-redisplayがtのまま非局所脱出します。
> (let ((debug-on-error t))
>   (x-popup-menu (list '(0 0) (selected-window))
> 	        '(keymap (aaa menu-item (aaa)))))

> こういうのを評価すれば、再現します。


Meadow-1.04 alpha1 上の Mewでforwardしようとしたときに発生する現象は
これ単体ではなく、複数回のデバッガ呼び出しと、Menuの奇妙な動作なども
引き起こします。(単純には説明できませんので割愛。)

このエラーはdraftバッファを準備後のdraftモードのメニューのkeymap評価の際
にエラーが発生しているがためにおこります。具体的には
mew-attach-not-line012-1 やら mew-attach-not-line012-1-dot やらです。

もちろん、Emacsがヘンな状態になってしまうのはMewの責任範囲を超えています
し、Emacs側でbug-fixされれば問題とはならないのかもしれませんが、それにし
ても、不必要にシグナルを発生させるコードというのもなにかと思うので、でき
ればシグナルを発生しないように、re-search-{forward,backword} の第3引数
をきちんと使用したコードにして欲しいなと思います。


本来はpatchを作って提出しようかと思ったのですが、なにぶん個所が多く、
その真意が分かりかねるため、まずはお伺いをと思ったため、パッチはまだ
ありません。


P.S.
上記現象が出た際は
M-: (setq inhibit-redisplay nil)<ENTER>
とすることで再描画が行われるようになります。

また、

>>>>> at Mon, 17 May 1999 16:31:58 +0900 (JST)
>>>>> Kenichi Handa <handa at example.com> said,> 
> ちなみに、取りあえずは
> 
> (add-hook 'debugger-mode-hook
> 	  (function (lambda () (setq inhibit-redisplay nil))))
> 
> で、この問題は回避できます。

とのことです。

しかし、Meadow 1.04 alpha1 上での mewの不具合の場合、これでは不十分で
個人的に以下のコードで仮対処してます。

(defadvice mew-summary-forward (around bug-walk-around activate)
  (let ((debug-on-error nil))
    ad-do-it))

--- Regards,
 Shun-ichi Goto  <gotoh at example.com>
   R&D Group, TAIYO Corp., Tokyo, JAPAN




Mew-dist メーリングリストの案内