3.18.3 Group Timestamp

It can be convenient to let Gnus keep track of when you last read a group. To set the ball rolling, you should add gnus-group-set-timestamp to gnus-select-group-hook:

(add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)

After doing this, each time you enter a group, it’ll be recorded.

This information can be displayed in various ways—the easiest is to use the ‘%d’ spec in the group line format:

(setq gnus-group-line-format
      "%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")

This will result in lines looking like:

*        0: mail.ding                                19961002T012943
         0: custom                                   19961002T012713

As you can see, the date is displayed in compact ISO 8601 format. This may be a bit too much, so to just display the date, you could say something like:

(setq gnus-group-line-format
      "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")

If you would like greater control of the time format, you can use a user-defined format spec. Something like the following should do the trick:

(setq gnus-group-line-format
      "%M\%S\%p\%P\%5y: %(%-40,40g%) %ud\n")
(defun gnus-user-format-function-d (headers)
  (let ((time (gnus-group-timestamp gnus-tmp-group)))
    (if time
        (format-time-string "%b %d  %H:%M" time)
      "")))

To see what variables are dynamically bound (like gnus-tmp-group), you have to look at the source code. The variable names aren’t guaranteed to be stable over Gnus versions, either.