[Mew-Win32 01017] Re: mew-fake-cdpでfilename="日本語.XLS"が落ちない
Shun-ichi GOTO
gotoh at example.com
1998年 11月 10日 (火) 15:08:39 JST
後藤@太陽計測です
>>>>> From: Hideyuki SHIRAI (白井秀行) <shirai at example.com>
> こんにちは、白井です。
...snip...
> おもいっきり ad hoc + 無理やりですが、対応すると以下のパッチのよう
> になります。
JISがデコードされていないのは今の今まで気がつきませんでした。
mew-header-sanity-check-string がESCをstripしていたせいなのね。
先のメールは読んでいたのですが、どうやってsanity-checkを回避しようか
考えているうちに先にパッチを出されてしまった。(^^;
もう解決しているようですが、でもせっかくこちらでも作ったので
なげてみちゃお。
回避方法としては白井さんのように mew-header-sanity-check-stringを
削った mew-syntax-get-member でもいいですが、それじゃぁ寄生虫として
プライドが許さない(笑) ので、sanity-checkされる前にdecodeして
しまうという手に出てみました。本来ASCIIだけで構成されるはずなので
問題無いはず。
イカパッチ、もとい、以下パッチ (IMEのバカ!)
--- mew-fake-cdp.el 1998/06/01 10:02:23 1.6
+++ mew-fake-cdp.el 1998/11/09 20:51:28
@@ -29,6 +29,9 @@
(defvar mew-fake-cdp-remove-space nil
"*Remove space/TAB characters in filename string")
+(defvar mew-fake-cdp-allow-non-ascii-coding t
+ "*Decode MIME parameters to support raw-JIS filename.")
+
(defun mew-fake-cdp-setup ()
"Setup to use mew-fake-cdp package"
(let (sym)
@@ -45,6 +48,22 @@
))))
+(defun mew-fake-cdp-decode-string-list (item)
+ "Decode ITEM which is string or list of string.
+Decode only if ITEM is string or element of list is string for each.
+Result is returned as same structure to given ITEM.
+It means, return string if ITEM is string, return list if ITEM is list
+of string, return itselft (ITEM) if anything else."
+ (cond
+ ((stringp item) ; case of siple string (not list)
+ (mew-cs-decode-string item mew-cs-autoconv))
+ ((listp item) ; list of string
+ (mapcar
+ '(lambda (x) (if (stringp x) (mew-cs-decode-string x mew-cs-autoconv) x))
+ item))
+ (t item))) ; others (nothing to do)
+
+
(defun mew-fake-cdp-decode-mime-header (&optional dct)
"Altanative function of mew-mew-decode-mime-header
to support un-official attachment filename extraction.
@@ -65,6 +84,11 @@
(cd (mew-syntax-get-cd syntax))
filename
)
+ ;; deocde for raw-JIS filename support.
+ (if mew-fake-cdp-allow-non-ascii-coding
+ (setq ctl (mew-fake-cdp-decode-string-list ctl)
+ cdpl (mew-fake-cdp-decode-string-list cdpl)
+ cd (mew-fake-cdp-decode-string-list cd)))
;; 1. use CDP: filename=
;; 2. use CT: name=
;; 3. use CD: (optional)
@@ -76,9 +100,6 @@
cd)))
(if (null filename)
() ;nothing to do
- ;; Kanji conversion from B/Q-Enc. and raw-JIS
- ;; raw JIS conversion
- (setq filename (mew-cs-decode-string filename mew-cs-7bit))
;; MIME decode
(while (string-match mew-header-decode-regex filename)
(setq filename (concat (substring filename 0 (match-beginning 0))
なぁんて、張り合ってパッチ出してもショーがないですけどね。(^^;
#妙な副作用として、JISでなく、Shift_JISで直接ファイル名指定されて
#いても良くなってしまった。
http://www.imasy.or.jp/~gotoh/mew.html もそのうち更新しておきます。
--- Regards,
Shun-ichi Goto <gotoh at example.com>
R&D Group, TAIYO Corp., Tokyo, JAPAN
Mew-win32 メーリングリストの案内