[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 メーリングリストの案内