new user format functions
authorJoerg Jaspert <joerg@debian.org>
Mon, 27 Apr 2015 08:43:16 +0000 (10:43 +0200)
committerJoerg Jaspert <joerg@debian.org>
Mon, 27 Apr 2015 08:43:16 +0000 (10:43 +0200)
.emacs.d/elisp/local/ganneff-gnus.el

index 2e8fa81..3afdbd6 100644 (file)
   (or (gnus-nnimap-count-format 1)
       gnus-tmp-number-of-unread))
 
+(defvar gnus-user-format-function-g-prev "" "")
+;;;###autoload
+(defun empty-common-prefix (left right)
+  "Given `left' '(\"foo\" \"bar\" \"fie\") and `right' '(\"foo\"
+    \"bar\" \"fum\"), return '(\"   \" \"   \" \"fum\")."
+  (if (and (cdr right) ; always keep the last part of right
+           (equal (car left) (car right)))
+      (cons (make-string (length (car left)) ? )
+            (empty-common-prefix (cdr left) (cdr right)))
+    right))
+;;;###autoload
+(defun gnus-user-format-function-g (arg)
+  "The full group name, but if it starts with a previously seen
+    prefix, empty that prefix."
+  (if (equal gnus-user-format-function-g-prev gnus-tmp-group) ; line-format is updated on exiting the summary, making prev equal this
+      gnus-tmp-group
+    (let* ((prev (split-string-and-unquote gnus-user-format-function-g-prev "\\.\\|:"))
+           (this (split-string-and-unquote gnus-tmp-group "\\.\\|:")))
+      (setq gnus-user-format-function-g-prev gnus-tmp-group)
+      (combine-and-quote-strings
+       (empty-common-prefix prev this)
+       "."))))
+
+
 (defvar nnimap-message-count-cache-alist nil)
 
 ;;;###autoload