[Mew-dist 14536] Re: change summary date to JST
Ninomiya Hideyuki
nin at example.com
2000年 10月 14日 (土) 00:42:17 JST
おやすみなさい 二宮@お四国 です
te-kun <j-kiss at example.com> は Fri, 13 Oct 2000 19:43:23 +0900 頃に
Subject: [Mew-dist 14533] Re: change summary date to JST
Message-Id: <20001013.194226.74755624.j-kiss at example.com>
に於いて以下のようにおっしゃっていました。
※都合により手を加えさせていただく事が有ります。御了承下さいマセヽ...
弓岡> こんにちは 弓岡です。
弓岡>
弓岡> From: Ninomiya Hideyuki <nin at example.com>
弓岡> Subject: [Mew-dist 14532] Re: change summary date to JST
弓岡> Date: Fri, 13 Oct 2000 18:23:25 +0900
弓岡>
弓岡> nin> 弓岡> 例えば、
弓岡> nin> 弓岡> Date: Thu, 12 Oct 2000 14:40:30 -0500
弓岡> nin> 弓岡> なんていうメールを summary で
弓岡> nin> 弓岡> 7562 10/13 hoge <hoge at example.com [hogehoge ML No.3259] hogehoge
弓岡> nin> 弓岡> みたいに表示できるのでしょうか。
弓岡> Mew の使い方すらろくに理解できてない私に Lisp を触るなんて
弓岡> ぞっとします。
自分も数行のパッチぐらいしか出来ないですけどっ、info の elisp
reference (英語オリジナル版)と 日本語翻訳版 と睨めっこし、
'C-hC-f', 'C-hC-v' を頼りにゴリヽやっています。
Mew のコードはとっても参考になると思うので、一部でもいいですから
試しに読んでみる事をお奨めします。
弓岡> nin> sort 時に GMT にした sort key 文字列を作るための関数は
弓岡> nin> ありますから、それを流用すれば簡単にできるんじゃないかな ?
これだけじゃあれなんで、、mew-func.el の該当部分を使いやすいように
書き換えてみました。
# あまり美しくは無いのでどなたか綺麗にしていただけると幸いですがっ...
弓岡> ありがとうございます。読める/書けるようになったら頑張ります。
後は、scan 関数を今在るのを参考(パクるともいう ^^;)にして作るだけっ
---8<------8<------8<------8<------8<------8<------8<------8<------8<---
*** mew-func.el.orig Fri Oct 13 09:59:20 2000
--- mew-func.el Sat Oct 14 00:00:24 2000
***************
*** 993,1003 ****
(defmacro mew-time-rfc-hour ()
'(string-to-int (substring s (match-beginning 4) (match-end 4))))
(defmacro mew-time-rfc-min ()
! '(substring s (match-beginning 5) (match-end 5)))
(defmacro mew-time-rfc-sec ()
! '(if (match-beginning 7)
! (substring s (match-beginning 7) (match-end 7))
! "00"))
(defmacro mew-time-rfc-tmzn ()
'(if (match-beginning 9)
(let ((tmzn (substring s (match-beginning 9) (match-end 9)))
--- 993,1003 ----
(defmacro mew-time-rfc-hour ()
'(string-to-int (substring s (match-beginning 4) (match-end 4))))
(defmacro mew-time-rfc-min ()
! '(string-to-int (substring s (match-beginning 5) (match-end 5))))
(defmacro mew-time-rfc-sec ()
! '(string-to-int (if (match-beginning 7)
! (substring s (match-beginning 7) (match-end 7))
! "0")))
(defmacro mew-time-rfc-tmzn ()
'(if (match-beginning 9)
(let ((tmzn (substring s (match-beginning 9) (match-end 9)))
***************
*** 1010,1015 ****
--- 1010,1028 ----
(t 0)))
0))
+ (defmacro mew-time-list-year (list)
+ (` (nth 0 (, list))))
+ (defmacro mew-time-list-mon (list)
+ (` (nth 1 (, list))))
+ (defmacro mew-time-list-day (list)
+ (` (nth 2 (, list))))
+ (defmacro mew-time-list-hour (list)
+ (` (nth 3 (, list))))
+ (defmacro mew-time-list-min (list)
+ (` (nth 4 (, list))))
+ (defmacro mew-time-list-sec (list)
+ (` (nth 5 (, list))))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;;
***************
*** 1017,1022 ****
--- 1030,1047 ----
;; "20000726231835"
(defun mew-time-rfc-to-sortkey (s)
+ (let ((list (mew-time-rfc-to-list s)))
+ (if list
+ (format "%4d%02d%02d%02d%02d%02d"
+ (mew-time-list-year list)
+ (mew-time-list-mon list)
+ (mew-time-list-day list)
+ (mew-time-list-hour list)
+ (mew-time-list-min list)
+ (mew-time-list-sec list)))))
+
+ ;; '(2000 7 26 23 18 35)
+ (defun mew-time-rfc-to-list (s &optional time-zone)
(if (string-match mew-time-rfc-regex s)
(let ((year (mew-time-rfc-year))
(mon (mew-time-mon-str-to-int (mew-time-rfc-mon)))
***************
*** 1030,1036 ****
(setq year (+ year 2000)))
((< year 100)
(setq year (+ year 1900))))
! (setq hour (- hour tmzn))
(cond
((< hour 0)
(setq hour (+ hour 24) day (1- day))
--- 1055,1062 ----
(setq year (+ year 2000)))
((< year 100)
(setq year (+ year 1900))))
! (if (null time-zone) (setq time-zone 0))
! (setq hour (+ (- hour tmzn ) time-zone))
(cond
((< hour 0)
(setq hour (+ hour 24) day (1- day))
***************
*** 1044,1050 ****
(if (> day (mew-last-day year mon))
(if (> (setq day 1 mon (1+ mon)) 12)
(setq year (1+ year) mon (- mon 12))))))
! (format "%4d%02d%02d%02d%s%s" year mon day hour min sec))))
(defvar mew-last-day-list '(31 nil 31 30 31 30 31 31 30 31 30 31))
--- 1070,1077 ----
(if (> day (mew-last-day year mon))
(if (> (setq day 1 mon (1+ mon)) 12)
(setq year (1+ year) mon (- mon 12))))))
! (list year mon day hour min sec))
! nil))
(defvar mew-last-day-list '(31 nil 31 30 31 30 31 31 30 31 30 31))
---8<------8<------8<------8<------8<------8<------8<------8<------8<---
mew-time-rfc-to-list という関数を用意しました。
これに Date: の値を渡してやる
(mew-time-rfc-to-list "Date: の値" &optional タイムゾーン値整数)
例 (mew-time-rfc-to-list "Date: Fri, 13 Oct 2000 19:43:23 +0900" 9)
# 30分差みたいなタイムゾーンって有りでしたっけ ? 考えてない...
と
(年 月 日 時 分 秒)
例 (2000 10 13 19 43 23)
というタイムゾーンを合わせた数値の list を返します。
このリストを渡して各項目を取り出すマクロも一応用意してみました。
(mew-time-list-year|mon|day|hour|min|sec list)
です。
---
ICQ UIN:57442553 二宮 秀幸@愛媛 鬼北 広見町
PGP-Fingerprint: 6C59 EC08 5B23 6490 44D0 7CD3 DA40 219F 7114 8553
PGP-Public-Key: http://user.shikoku.ne.jp/~nin/pgp/public-key.txt
mailto:nin at example.com http://user.shikoku.ne.jp/~nin/index.html
mailto:nin at example.com http://home.jp.freebsd.org/~nin/index.html
Mew-dist メーリングリストの案内