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