Change the Date defaults to showing a combined, continuosly updated "lapsed" format.
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 26 Jan 2011 23:50:11 +0000 (15:50 -0800)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 26 Jan 2011 23:50:11 +0000 (15:50 -0800)
lisp/ChangeLog
lisp/gnus-art.el

index ba42762..900b5a5 100644 (file)
@@ -5,6 +5,8 @@
        next article at once.
        (article-lapsed-string): Refactor out and allow specifying how many
        segments you want.
+       (gnus-article-setup-buffer): Start updating the lapsed header directly.
+       (gnus-article-update-lapsed-header): New variable.
 
        * shr.el: Revert change that made headings use different-sized faces.
        The Emacs display engine isn't advanced enough that, for instance,
index 96f3136..327250e 100644 (file)
@@ -1023,6 +1023,15 @@ be added below it (otherwise)."
   :group 'gnus-article-headers
   :type 'boolean)
 
+(defcustom gnus-article-update-lapsed-header 1
+  "How often to update the lapsed date header.
+If nil, don't update it at all."
+  :version "24.1"
+  :group 'gnus-article-headers
+  :type '(choice
+         (item :tag "Don't update" :value nil)
+         integer))
+
 (defcustom gnus-article-mime-match-handle-function 'undisplayed-alternative
   "Function called with a MIME handle as the argument.
 This is meant for people who want to view first matched part.
@@ -1290,6 +1299,14 @@ predicate.  See Info node `(gnus)Customizing Articles'."
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-head-custom)
 
+(defcustom gnus-treat-date-combined-lapsed 'head
+  "Display the Date header in a way that says how much time has elapsed.
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate.  See Info node `(gnus)Customizing Articles'."
+  :group 'gnus-article-treat
+  :link '(custom-manual "(gnus)Customizing Articles")
+  :type gnus-article-treat-head-custom)
+
 (defcustom gnus-treat-date-original nil
   "Display the date in the original timezone.
 Valid values are nil, t, `head', `first', `last', an integer or a
@@ -1680,6 +1697,7 @@ regexp."
     (gnus-treat-date-user-defined gnus-article-date-user)
     (gnus-treat-date-iso8601 gnus-article-date-iso8601)
     (gnus-treat-date-lapsed gnus-article-date-lapsed)
+    (gnus-treat-date-combined-lapsed gnus-article-date-combined-lapsed)
     (gnus-treat-display-x-face gnus-article-display-x-face)
     (gnus-treat-display-face gnus-article-display-face)
     (gnus-treat-hide-headers gnus-article-maybe-hide-headers)
@@ -3500,7 +3518,8 @@ should replace the \"Date:\" one, or should be added below it."
 
 (defun article-make-date-line (date type)
   "Return a DATE line of TYPE."
-  (unless (memq type '(local ut original user iso8601 lapsed english date-lapsed))
+  (unless (memq type '(local ut original user iso8601 lapsed english
+                            combined-lapsed))
     (error "Unknown conversion type: %s" type))
   (condition-case ()
       (let ((time (date-to-time date)))
@@ -3550,8 +3569,9 @@ should replace the \"Date:\" one, or should be added below it."
         ((eq type 'lapsed)
          (concat "X-Sent: " (article-lapsed-string time)))
         ;; A combined date/lapsed format.
-        ((eq type 'date-lapsed)
-         (concat "Date: " (article-lapsed-string time 3)))
+        ((eq type 'combined-lapsed)
+         (concat (article-make-date-line date 'original)
+                 " (" (article-lapsed-string time 3) ")"))
         ;; Display the date in proper English
         ((eq type 'english)
          (let ((dtime (decode-time time)))
@@ -3591,12 +3611,11 @@ should replace the \"Date:\" one, or should be added below it."
       (setq max-segments (length article-time-units)))
     (cond
      ((null real-time)
-      "X-Sent: Unknown")
+      "Unknown")
      ((zerop sec)
-      "X-Sent: Now")
+      "Now")
      (t
       (concat
-       "X-Sent: "
        ;; This is a bit convoluted, but basically we go
        ;; through the time units for years, weeks, etc,
        ;; and divide things to see whether that results
@@ -3646,6 +3665,11 @@ function and want to see what the date was before converting."
   (interactive (list t))
   (article-date-ut 'lapsed highlight))
 
+(defun article-date-combined-lapsed (&optional highlight)
+  "Convert the current article date to time lapsed since it was sent."
+  (interactive (list t))
+  (article-date-ut 'combined-lapsed highlight))
+
 (defun article-update-date-lapsed ()
   "Function to be run from a timer to update the lapsed time line."
   (save-match-data
@@ -3658,8 +3682,10 @@ function and want to see what the date was before converting."
            (when (eq major-mode 'gnus-article-mode)
              (let ((mark (point-marker)))
                (goto-char (point-min))
-               (when (re-search-forward "^X-Sent:" nil t)
-                 (article-date-lapsed t))
+               (when (re-search-forward "^X-Sent:\\|^Date:" nil t)
+                 (if gnus-treat-date-combined-lapsed
+                     (article-date-combined-lapsed t)
+                   (article-date-lapsed t)))
                (goto-char (marker-position mark))
                (move-marker mark nil))))
          nil 'visible))))))
@@ -4307,6 +4333,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
      article-decode-encoded-words
      article-date-user
      article-date-lapsed
+     article-date-combined-lapsed
      article-emphasize
      article-treat-dumbquotes
      article-treat-non-ascii
@@ -4503,6 +4530,9 @@ commands:
        (setq gnus-summary-buffer
              (gnus-summary-buffer-name gnus-newsgroup-name))
        (gnus-summary-set-local-parameters gnus-newsgroup-name)
+       (when (and gnus-article-update-lapsed-header
+                  (not article-lapsed-timer))
+         (gnus-start-date-timer gnus-article-update-lapsed-header))
        (current-buffer)))))
 
 ;; Set article window start at LINE, where LINE is the number of lines