[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bep] wmail support mode?



井上です。
嘘を書くかも知れないので間違っていたら修正してください。

Reiko TAKAHASHI <HFC03614@...> (高橋玲子) writes:

>  できました(^_^)。

とりあえずおめでとうございます。

> 最初、|の前の\を一つにしていてうまくいかず、坂本さんの
> 
> } 多分エスケープ文字は\\とする必要があるのだとおもいます。
> 
> をヒントに、\を増やしてみたらうまくいきました。
> 「エスケープ文字」ってなんですか?
> \nだと\は一つでよかったのに、なぜ\|ではまずいのでしょう?

M-x re-search-forwardで検索するときは\|でいいです。ただしこの場合は\n
が使えずC-q C-jしないといけなかったことを思い出してください。
re-search-forwardを関数として使うときは引数にlispの文字列を与えるわけ
ですが、文字列をlispプログラム内に書くときには便利なように一部の文字を
「\なんとか」という別の文字列で書くことができます。たとえば「\n」が改
行になることですね。このようにlispを含めて多くのプログラム言語中で文字
列(文字列定数)を書くときに、\は特別な意味を持ちます。
しかし、考えて見ると、本当に「\n」という文字列をlispの文字列の中に書き
たいことがあるかも知れません。そういうときのために、\\と\を2度書くと\
という1文字を表すことになっているのです。
上の例では本当に検索したい文字列は
"^----------^J\|^J^J"
# 便宜上改行を^Jと書きました。
です。これを、\が特殊な扱いを受けることを考慮して書き直すと
"^----------\n\\|\n\n"
になるわけです。
文字列「\\\\」(\が四つ)をプログラム中に記述するときは、
"\\\\\\\\"
と8個にしないといけなくなります。

emacs-lispの正規表現の中に\が出てきて、文字列をプログラム中に書くとき
には\が特殊な扱いを受けるという事情から\をたくさん重ねないといけない状
況に陥りますが、我慢するしかないみたいです。

>  あと、もう一つおもしろかったのは、\|を使って検索した場合、まず最初に指
> 定した文字列を検索して、それがなかった場合にだけ二番目の文字列を検索する、
> みたいになっているんですね。

え?そういうことはないと思うのですが、違うかな?
そういう前提だといろいろ不都合が出てくる気がするのですが。
たとえば、Emacsの起動時に現れる This bufferで始まる文章の最初にカーソ
ルを置いて
M-x re-search-forward
で v\|er を検索すると、ちゃんと最初のbufferに止まります。

> }       (cons (cons "\\.html?$" 'yahtml-mode) auto-mode-alist))
> } 
> } ファイル名が.htmまたは.htmlで終わっていたら yahtml-modeという関数を実
> } 行。
> 
> の(cons)は、なにをする関数なのでしょう?

これはn高橋さんが積み残したと言っておられたlistの説明を待つ方がいいか
も知れませんが、
(cons 'a 'b)
でcarが'a cdrが'bのcons cellを作るということになってます。
うう、説明を書こうとしましたが、今考えていると首になりそうなのでやめて
おきます。(^^;)
今の高橋さんならばelispのマニュアルを読んでも理解できそうな気がします。

>  WMailでは、最初にメールの草稿を書くファイルがtext.tmpで、そこではヘッダ
> と本文部分が'-'10個の行で分けられています。
> 一度草稿を保存して、それを再度編集するときは、mail.txtというファイルにな
> って、ヘッダと本文の間には、'-'ではなく空行が入るようになります。
> それで、'-'10個か空行を探すようにしよう、と思ったのですが、もしかして、こ
> の二つのsearchは別々の関数にして、それぞれにmodeを割り当てたほうが効率的
> ……でしょうか?

一緒でいいと思います。たとえばこんなのではうまく行かないでしょうか。

(setq auto-mode-alist
      (cons (cons "\\(text\\.tmp\\|mail\\.txt\\)$" 'wmail-mode) auto-mode-alist))

-- 
                    Koichi Inoue, ARGV
                    E-Mail: inoue@...
                    ICQ UIN: 74900690