From 85148cc66e2b9ea96ed9373e892aacd718c53d69 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Wed, 26 Jan 2011 15:50:11 -0800 Subject: [PATCH] Change the Date defaults to showing a combined, continuosly updated "lapsed" format. --- lisp/ChangeLog | 2 ++ lisp/gnus-art.el | 46 ++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ba4276241..900b5a5e7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -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, diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 96f3136c2..327250e32 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -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 -- 2.25.1