--- /usr/share/emacs/site-lisp/gnus/gnus-sum.el Wed Jan 26 01:23:18 2000 +++ gnus-sum.el Tue Jun 13 21:23:40 2000 @@ -941,11 +941,13 @@ (and (boundp 'thread) (car thread)) gnus-tmp-level t) ?c) (?u gnus-tmp-user-defined ?s) - (?P (gnus-pick-line-number) ?d)) + (?P (gnus-pick-line-number) ?d) + (?B gnus-tmp-thread-tree-header-string ?s)) "An alist of format specifications that can appear in summary lines, and what variables they correspond with, along with the type of the variable (string, integer, character, etc).") + (defvar gnus-summary-dummy-line-format-alist `((?S gnus-tmp-subject ?s) (?N gnus-tmp-number ?d) @@ -3768,6 +3770,16 @@ (or (cdr (assq type (mail-header-extra (or header gnus-tmp-header)))) "")) +;; Not sure, whether this is the right place to put these variables. +(defvar gnus-tmp-thread-tree-header-string nil) + +(defvar gnus-sum-thread-tree-root "> ") +(defvar gnus-sum-thread-tree-single-indent "") +(defvar gnus-sum-thread-tree-vertical "| ") +(defvar gnus-sum-thread-tree-indent " ") +(defvar gnus-sum-thread-tree-leaf-with-other "+->") +(defvar gnus-sum-thread-tree-single-leaf "\\->") + (defun gnus-summary-prepare-threads (threads) "Prepare summary buffer from THREADS and indentation LEVEL. THREADS is either a list of `(PARENT [(CHILD1 [(GRANDCHILD ...]...) ...])' @@ -3786,7 +3798,8 @@ gnus-tmp-replied gnus-tmp-subject-or-nil gnus-tmp-dummy gnus-tmp-indentation gnus-tmp-lines gnus-tmp-score gnus-tmp-score-char gnus-tmp-from gnus-tmp-name - gnus-tmp-number gnus-tmp-opening-bracket gnus-tmp-closing-bracket) + gnus-tmp-number gnus-tmp-opening-bracket gnus-tmp-closing-bracket + tree-stack) (setq gnus-tmp-prev-subject nil) @@ -3824,7 +3837,8 @@ ;; the stack. (setq state (car stack) gnus-tmp-level (car state) - thread (cdr state) + tree-stack (cadr state) + thread (caddr state) stack (cdr stack) gnus-tmp-header (caar thread)))) @@ -3929,7 +3943,7 @@ (push (gnus-data-make number gnus-tmp-unread (1+ (point)) gnus-tmp-header gnus-tmp-level) gnus-newsgroup-data) - + ;; Actually insert the line. (setq gnus-tmp-subject-or-nil @@ -3990,7 +4004,21 @@ ((string-match "(.+)" gnus-tmp-from) (substring gnus-tmp-from (1+ (match-beginning 0)) (1- (match-end 0)))) - (t gnus-tmp-from))) + (t gnus-tmp-from)) + gnus-tmp-thread-tree-header-string + (if (zerop gnus-tmp-level) + (if (or (cdar thread) (not (nth 1 thread))) + gnus-sum-thread-tree-root + gnus-sum-thread-tree-single-indent) + (concat (apply 'concat (mapcar (lambda (item) + (if (= item 1) + gnus-sum-thread-tree-vertical + gnus-sum-thread-tree-indent)) + (cdr (reverse tree-stack)))) + (if (nth 1 thread) + gnus-sum-thread-tree-leaf-with-other + gnus-sum-thread-tree-single-leaf)))) + (when (string= gnus-tmp-name "") (setq gnus-tmp-name gnus-tmp-from)) (unless (numberp gnus-tmp-lines) @@ -4007,7 +4035,13 @@ (setq gnus-tmp-prev-subject subject))) (when (nth 1 thread) - (push (cons (max 0 gnus-tmp-level) (nthcdr 1 thread)) stack)) + (push (list (max 0 gnus-tmp-level) + (copy-list tree-stack) + (nthcdr 1 thread)) + stack)) + + (push (if (nth 1 thread) 1 0) tree-stack) + (incf gnus-tmp-level) (setq threads (if thread-end nil (cdar thread))) (unless threads