SSブログ

MewのSummaryモードでのローカルタイムへの変換 [Linux]

以前から先送りしていた、Mew の Summary モードでのローカルタイムへの変換対応を行った。
尚、これまでは変換せず、日時とタイムゾーンを表示していた。

編集するファイルは ~/.mew.el であり、手順は、以下の通りである。
(ソースの詳細は、備考を参照。)

1. 変数 mew-summary-ctz の追加
(defvar mew-summary-ctz t
  "*If mew-summary-ctz is t,
use local time zone in Summary mode.")


変数 mew-summary-ctz が t の場合、ローカルタイムゾーンでの日時を表示する。
それ以外の場合、メールヘッダーの日時をそのまま表示する。


2. mew-summary-form-year2 関数の作成


mew-summary-form-year 関数をコピーし、下記の変更を行う。

(1) 変更箇所


下記の when を if に変更し、else 部分を追加する。

(when (or (string= s "")
      (not (string-match mew-time-rfc-regex s)))
  ...)


(2) 変更内容


下記のコードを追加する。

(when mew-summary-ctz
  (setq s (timezone-make-date-arpa-standard s)))


(補足)
mew-summary-form-year は、mew-scan.el で定義されている。


3. mew-summary-form-date2 関数の作成


mew-summary-form-date 関数をコピーし、下記の変更を行う。

(1) 変更箇所


mew-summary-form-year2 関数と同様。


(2) 変更内容


mew-summary-form-year2 関数と同様。

(補足)
mew-summary-form-date は、mew-scan.el で定義されている。


4. mew-summary-form-time2 関数の作成


mew-summary-form-time 関数をコピーし、下記の変更を行う。

(1) 変更箇所


mew-summary-form-year2 関数と同様。
(ただし、元々 when ではなく、if が使用されている。)


(2) 変更内容


mew-summary-form-year2 関数と同様。

(補足)
mew-summary-form-time は、mew-scan.el で定義されている。


5. mew-summary-form-tmzn 関数の作成
(defun mew-summary-form-tmzn ()
  "A function to return the time zone of message time, [+-]HHMM."
  (let ((s (MEW-DATE)))
    (if (or (string= s "")
            (not (string-match mew-time-rfc-regex s)))
        (setq s (mew-time-ctz-to-rfc
                 (mew-file-get-time (mew-expand-msg (MEW-FLD) (MEW-NUM)))))
      (when mew-summary-ctz
        (setq s (timezone-make-date-arpa-standard s))))
    (if (not (string-match mew-time-rfc-regex s))
        ""
      (setq s (mew-time-rfc-tmzn))
      (format "%+03d%02d" (/ s 3600) (/ (% s 3600) 60)))))

6. 変数 mew-summary-form の設定変更


year2、date2、time2、tmzn を表示するように変更する。

(defun mew-summary-form-num ()
  "A function to return a message number."
  (MEW-NUM))
(defvar mew-summary-message-number t
  "*If mew-summary-message-number is t,
display message number in Summary mode.")

(setq mew-summary-form
      (if mew-summary-message-number
          ;; display message number
          '((-4 num) " " type
            (4 year2) "-" (5 date2) " " (8 time2) " " (5 tmzn)
            " " (16 from) " " t (0 subj))
        ;; display no message number
        '(type
          (4 year2) "-" (5 date2) " " (8 time2) " " (5 tmzn)
          " " (16 from) " " t (0 subj))))

7. ローカルタイムへの変換以外の変更点


今回行った変更以外に、下記の変更を行っている。

・日付フォーマットの変更 (YYYY/MM/DD から YYYY-MM-DD へ変更)
・時刻フォーマットの変更 (HH:MM から HH:MM:SS へ変更)
・タイムゾーンの表示
・メッセージ番号の表示 (変数 mew-summary-message-number で表示の有無を制御)


8. 備考
(defun mew-summary-form-year2 ()
  "A function to return a message year, YYYY"
  (let ((s (MEW-DATE)) year)
    (if (or (string= s "")
            (not (string-match mew-time-rfc-regex s)))
        (setq s (mew-time-ctz-to-rfc
                 (mew-file-get-time (mew-expand-msg (MEW-FLD) (MEW-NUM)))))
      (when mew-summary-ctz
        (setq s (timezone-make-date-arpa-standard s))))
    (if (not (string-match mew-time-rfc-regex s))
        "0000"
      (setq year (mew-time-rfc-year))
      (cond
       ((< year 50)
        (setq year (+ year 2000)))
       ((< year 100)
        (setq year (+ year 1900))))
      (number-to-string year))))

(defun mew-summary-form-date2 ()
  "A function to return a message date, MM-DD."
  (let ((s (MEW-DATE)))
    (if (or (string= s "")
            (not (string-match mew-time-rfc-regex s)))
        (setq s (mew-time-ctz-to-rfc
                 (mew-file-get-time (mew-expand-msg (MEW-FLD) (MEW-NUM)))))
      (when mew-summary-ctz
        (setq s (timezone-make-date-arpa-standard s))))
    (if (string-match mew-time-rfc-regex s)
        (format "%02d-%02d"
                (mew-time-mon-str-to-int (mew-time-rfc-mon))
                (mew-time-rfc-day))
      "")))

(defun mew-summary-form-time2 ()
  "A function to return a message time, HH:MM:SS."
  (let ((s (MEW-DATE)))
    (if (or (string= s "")
            (not (string-match mew-time-rfc-regex s)))
        (setq s (mew-time-ctz-to-rfc
                 (mew-file-get-time (mew-expand-msg (MEW-FLD) (MEW-NUM)))))
      (when mew-summary-ctz
        (setq s (timezone-make-date-arpa-standard s))))
    (if (string-match mew-time-rfc-regex s)
        (format "%02d:%02d:%02d"
                (or (mew-time-rfc-hour) 0)
                (or (mew-time-rfc-min)  0)
                (or (mew-time-rfc-sec)  0))
      "00:00:00")))

(defun mew-summary-form-tmzn ()
  "A function to return the time zone of message time, [+-]HHMM."
  (let ((s (MEW-DATE)))
    (if (or (string= s "")
            (not (string-match mew-time-rfc-regex s)))
        (setq s (mew-time-ctz-to-rfc
                 (mew-file-get-time (mew-expand-msg (MEW-FLD) (MEW-NUM)))))
      (when mew-summary-ctz
        (setq s (timezone-make-date-arpa-standard s))))
    (if (not (string-match mew-time-rfc-regex s))
        ""
      (setq s (mew-time-rfc-tmzn))
      (format "%+03d%02d" (/ s 3600) (/ (% s 3600) 60)))))

(defun mew-summary-form-num ()
  "A function to return a message number."
  (MEW-NUM))

;; set format in Summary mode
(defvar mew-summary-ctz t
  "*If mew-summary-ctz is t,
use local time zone in Summary mode.")
(defvar mew-summary-message-number t
  "*If mew-summary-message-number is t,
display message number in Summary mode.")
(setq mew-summary-form
      (if mew-summary-message-number
          ;; display message number
          '((-4 num) " " type
            (4 year2) "-" (5 date2) " " (8 time2) " " (5 tmzn)
            " " (16 from) " " t (0 subj))
        ;; display no message number
        '(type
          (4 year2) "-" (5 date2) " " (8 time2) " " (5 tmzn)
          " " (16 from) " " t (0 subj))))


nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。