(require 'calendar) (defvar my-dow-date-regexp "\\(?:\\([0-9]+\\)[年/-]\\)?\\([01]?[0-9]\\)[月/-]\\([0123]?[0-9]\\)[日]?[  ]*[((]\\([^))]+\\)[))]") (defvar my-dow-index-year 1) (defvar my-dow-index-month 2) (defvar my-dow-index-day-of-month 3) (defvar my-dow-index-name 4) (defvar my-dow-day-regexp-alist (let ((alist '())) (dolist (spec '((0 "sun" "日") (1 "mon" "月") (2 "tue" "火") (3 "wed" "水") (4 "thu" "木") (5 "fri" "金") (6 "sat" "土")) alist) (let* ((en0 (cadr spec)) (en1 (list en0 (capitalize en0) (upcase en0))) (en2 (append en1 (mapcar (lambda (s) (concat s ".")) en1))) (ja0 (nth 2 spec)) (ja1 (list ja0 (concat ja0 "曜") (concat ja0 "曜日"))) (re (regexp-opt (append en2 ja1)))) (setq alist (cons (cons (car spec) (concat "^" re "$")) alist)))))) (defun my-dow-check-in-message () "Check the day of week following date in message." (goto-char (mew-header-end)) (let ((ol (make-overlay 0 0))) (overlay-put ol 'face 'highlight) (unwind-protect (while (re-search-forward my-dow-date-regexp (point-max) t) (let ((mdy (mapcar (lambda (i) (string-to-number (or (match-string i) ""))) (list my-dow-index-month my-dow-index-day-of-month my-dow-index-year))) (s (match-string my-dow-index-name)) (b (match-beginning my-dow-index-name)) (e (match-end my-dow-index-name))) (when (= 0 (nth 2 mdy)) (setcar (cddr mdy) (string-to-number (format-time-string "%Y" (current-time))))) (let ((wday (calendar-day-of-week mdy))) (dolist (pair my-dow-day-regexp-alist) (when (string-match (cdr pair) s) (unless (= wday (car pair)) (move-overlay ol b e) (let ((msg (format "It is afraid of %s" (aref calendar-day-name-array wday)))) (when (y-or-n-p (concat msg ". Do you want to modify it?")) (goto-char e) (error msg))))))))) (delete-overlay ol)))) (add-hook 'mew-make-message-hook 'my-dow-check-in-message)