timezone in notmuch

Teemu Likonen tlikonen at iki.fi
Wed Apr 15 22:37:12 PDT 2020


Tomi Ollila [2020-04-15T23:17:32+03] wrote:

> I use this:
>
> https://github.com/domo141/nottoomuch/blob/master/build/01-date-local.patch
>
> I've been thinking if some hook could be added to notmuch-emacs so
> that such a custom date mangling can be done outside of the
> notmuch-emacs source...

Formerly I used Emacs Gnus and its hook to change the date. For this
discussion I adapted the idea to Notmuch. The code below is based on
idea that after article display there is a hook which can do anything
user wants. I wanted ISO 8601 date.



;; Add a hook for changing article's date string.
(add-hook 'some-article-display-hook 'tl-notmuch-custom-article-date)


(defmacro notmuch-narrow-to-article-headers (&rest body)
  ;; Implement macro which uses NARROW function to narrow current buffer
  ;; to article's headers only.
  `(progn , at body))


(defun tl-notmuch-custom-article-date ()
  (save-excursion
    (save-match-data
      (notmuch-narrow-to-article-headers
       (goto-char (point-min))
       (when (re-search-forward "^Date: \\(.+\\)$" nil t)
         (let ((inhibit-read-only t))
           (replace-match (tl-message-date-string-iso
                           (match-string-no-properties 1))
                          nil t nil 1)))))))


(defun tl-message-date-string-iso (string)
  ;; Parse message date STRING and return ISO 8601 time string.
  (require 'parse-time)
  (condition-case nil
      (let* ((date-list (parse-time-string string))
             (year (nth 5 date-list))
             (month (nth 4 date-list))
             (day (nth 3 date-list))
             (hour (nth 2 date-list))
             (min (nth 1 date-list))
             (sec (nth 0 date-list))
             (tz-total-sec (nth 8 date-list)))

        (format "%04d-%02d-%02dT%02d:%02d:%02d%s"
                year month day hour min sec
                (if (not tz-total-sec)
                    ""
                  (let* ((tz-sign (if (>= tz-total-sec 0) "+" "-"))
                         (tz-hour (truncate (abs tz-total-sec) 3600))
                         (tz-min (truncate (- (abs tz-total-sec)
                                              (* tz-hour 3600))
                                           60)))
                    (cond
                     ((= tz-hour tz-min 0) "Z")
                     ((= tz-min 0)
                      (format "%s%02d" tz-sign tz-hour))
                     (t
                      (format "%s%02d:%02d" tz-sign tz-hour tz-min)))))))

    (error string)))


-- 
/// Teemu Likonen - .-.. http://www.iki.fi/tlikonen/
// OpenPGP: 4E1055DC84E9DFF613D78557719D69D324539450
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 251 bytes
Desc: not available
URL: <http://notmuchmail.org/pipermail/notmuch/attachments/20200416/5c7533e0/attachment.sig>


More information about the notmuch mailing list