[Mew-dist 12813] Re: Reply string
Shun-ichi GOTO
gotoh at example.com
2000年 4月 12日 (水) 19:04:04 JST
>>>>> at Wed, 12 Apr 2000 14:16:28 +0900
>>>>> kazu == Kazu Yamamoto (山本和彦) <kazu at example.com> said,
kazu> やるなら、Forward: と Fw: もやりましょう。
kazu> Subject: Re: Fw: Re: hoge = reply => Subject: Re: hoge
kazu> Subject: Re: Fw: Re: hoge = forward => Subject: Fw: hoge
kazu> のように、Re: と Fw: が 1 回だけ現れるようになっていて欲しいです。
今日の現実逃避ネタとして使わせていただきました(._.)>
Subject: のbody に対して simplify 処理を行なう関数、mew-subject-simplify
を作ってみました。一例としてどうでしょうか。
# subject: 以外で必要になるかどうか?
## 単体なので、これだけで draft のメッセージが置き換わるわけではないです。
詳細説明はしませんが、ご所望の動作は出来ていると思います。
mew-subject-simplify-test というテストプログラム用意してあるので
そのサンプルあたりもご確認いただければと思います。
## 苛めてみるのもいいかも。
kazu> あと、
kazu> (was ....)
kazu> を削除するオプションが欲しいですね。
オプションではないですが、これもやってみました。
完全な動作は望みようが無いのでこれくらいでカンベン
kazu> それで、いかようにもカスタマイズ可能なように、柔軟にプログラミングして
kazu> 頂けると嬉しいです。
このあたりの処理って、似たようなコードがいくつもありそうですね。
例えば config-guess -> replace とか、自分では使ってたりする。
ま、1例ということで
## これから飲みに出ます(^^;
--- Regards,
Shun-ichi Goto <gotoh at example.com>
R&D Group, TAIYO Corp., Tokyo, JAPAN
-------------- next part --------------
;; Sample code for simplify Subject: field (in reply for example)
;; Date: 2000/04/12
;; Author: Shun-ichi Goto <gotoh at example.com>
;; Note: * See [Mew-dist 12807] Re: Reply string
;; * Not work on Emacs 19.28 (for 4th arg of replace-match)
(defconst mew-subject-re-regex
"Re\\(\\|\\^[0-9]+\\|\\[[0-9]+\\]\\|([0-9]+)\\|\\*[0-9]+\\): *"
"Regexp of various Re: expression in Subject:")
(defconst mew-subject-fw-regex "\\(Fw\\|Forward\\): *"
"Regexp of various Fw: expression in Subject:")
(defvar mew-subject-simplify-replace-alist
(list
;; (REGEXP . NEW) ... NEW may be nil for deletion (same to "")
;; replace multiple Re: and Fw: into single Re:
(cons (concat "^" ; regexp
mew-subject-re-regex
"\\("
mew-subject-re-regex
"\\|"
mew-subject-fw-regex
"\\)*")
"Re: ") ; new text
;; replace multiple Fw: and Re: into single Fw:
(cons (concat "^" ; regexp
mew-subject-fw-regex
"\\("
mew-subject-re-regex
"\\|"
mew-subject-fw-regex
"\\)*")
"Fw: ") ; new text
;; delete extra string (no new text means delete)
(cons " *(was[^)]*) *$" nil)) ; regexp
"*Replacement alist to simplify Subject: field body
Each element is cons cell whos car is REGEXP to replace,
cdr is new text. "
)
(defun mew-subject-simplify ( str &optional action-list)
""
(let (regexp replace)
(if (null action-list)
(setq action-list mew-subject-simplify-replace-alist))
(while action-list
(setq regexp (car (car action-list))
replace (cdr (car action-list))
action-list (cdr action-list))
(if (string-match regexp str)
(setq str (replace-match (or replace "") t t str))))
str))
;; test .... make test for some samples.
;; 1st element of test-alist is EXPECTED string.
;; Rests are list of test string which should result 1st elem.
;;
;; +--- C-x C-e here!
;; |
;; V
;; (mew-subject-simplify-test)
(defun mew-subject-simplify-test ()
(let ((test-alist '(("hoge" "hoge") ; no change
;; simplify into single Re:
("Re: hoge" ; expected result
"Re: hoge" "RE: hoge" "re: hoge"
"Re*2: hoge" "Re*124: hoge"
"Re(2): hoge" "Re(987): hoge"
"Re[2]: hoge" "Re[182736]: hoge"
;; multi
"Re: Re: hoge"
"Re: Re*22: hoge"
"Re*2: Re[13]: hoge"
;; mixed
"re^1234: fw: RE: hoge"
)
;; Re: in middle
("Re: hoge Re: hage"
"Re: Fw: hoge Re: hage")
;; simplify into single Fw:
("Fw: hoge" ; expected result
"FW: hoge"
"Forward: hoge"
;; multi
"Fw: Fw: hoge"
"Forward: Fw: hoge"
"Fw: Forward: hoge"
;; mixed
"fw: re^1234: forward: RE: hoge"
)
;; Fw: in middle
("Re: hoge Fw: hage"
"Re: Fw: hoge Fw: hage")
;; test for deletion of trailing "(was ...)"
("New Subject" ; expected result
"New Subject (was old title)"
"New Subject (was old title) "
"New Subject (was old title)")
;; mixed
("Re: New Subject"
"RE: New Subject (was re: old title)"
"Re^3: Fw: Re*00: New Subject (was re: old title Re: ) "
)
;; exceptions ... no change
("Re(): hoge" "Re(): hoge")
("Re[20: hoge" "Re[20: hoge")
("Re^: hoge" "Re^: hoge")
))
expect srcs ans)
(while test-alist
(setq expect (car (car test-alist))
srcs (cdr (car test-alist))
test-alist (cdr test-alist))
(while srcs
(setq ans (mew-subject-simplify (car srcs)))
(if (not (string= ans expect))
(error "Failed: \"%s\" => \"%s\" != \"%s\"" (car srcs) ans expect))
(setq srcs (cdr srcs))))
(message "All passed")))
Mew-dist メーリングリストの案内