[Mew-dist 04823] Re: Cannot pick message

OKUNISHI Fujikazu fuji0924 at example.com
1998年 5月 24日 (日) 18:07:43 JST


>>> [Mew-dist : No.04807] にて

>> `|' の前後いずれかに white space がないといけない仕様は直して戴ける
>> としても、

> white space がないと失敗しますか? 僕のところでは、white space は不
> 要です。

あ、どっちかというと Mew の外(との関係)の問題ですね。pick macro の展
開は確かに失敗しませんでした。
問題は、white space がない場合に si:start-process() で quote してくれ
ないので、コマンドラインに展開される文字列が bad なわけです。
C はわからないのですが、si:start(call)-process() への手の入れ方にもよ
るでしょうから、環境によっては動くのかもしれません(quote されてない
arg をも常に強制的に quote してしまう、というような手の入れ方)。

;; そんな無節操な移植って本当にあるんでしょうか? (^_^; shell に依存す
;; る部分もあるかもしれません。

`|' は OS 汎用で pipe を意味し、OS/2 の `&' は UN|X での `;'、UN|X の
`&' は background を意味しますが、これらが quote されずにコマンドライ
ンに展開されるので誤動作します。

つまり、`|' はいかなる場合も imls が実際に動かされる前にエラーとなり
(Mew はエラーを検出してないので何もマッチしなかったように見える)、
`&' の場合は OS/2 では `&' より前のパターンのみが pick され、`&' の後
ろの最初の word をコマンドと見做して imls 実行後に動かそうとして裏でこ
けます(よって、マッチした分は scan されるが、その結果は全てのパターン
を反映したものではない、ということに注意)。

;; UN|X では `&' より後ろに文字列があった場合、どう扱われるんでしょ?

[pick pattern="From=fujitsu& To=yamaoka"] -- ○
]	imls --width=82 --help=no --debug=no --src=+mini-elips \
]	 "--grep=From=fujitsu& To=yamaoka"

[pick pattern="From=fujitsu&To=yamaoka"] -- ×
]	imls --width=82 --help=no --debug=no --src=+mini-elips \
]	 --grep=From=fujitsu
;; quote されなかったため `&' でぶった切られ、From=fujitsu にマッチし
;; たものだけが imls された後、コマンド `To=yamaoka' を実行しようとし
;; て以下のエラー(Mew 上からはこのエラーは見えない)。
]	SYS1041: 指定された名前 To は,内部コマンド/外部コマンド/
]	実行可能なプログラム名/バッチ・ファイルのいずれでもありません
]	255

要は mew-pick-macro-expand-string() の内部で `|' または `&' が見つかっ
た場合に、その前後いずれかに white space を無条件に挿入すればいいので
すが、内部でネストしてて動きが複雑なため、手を焼いています(^_^;

> 現在 read-from-minibuffer を使うすべての関数で、1 つの keymap を使う
> ようにしていますが、pick pattern だけ keymap を変えるべきではないか
> と考えています。

はい、そのほうが嬉しいです。

--ふ



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