*** empty log message ***
[gnus] / lisp / gnus-salt.el
index 7ad9633..1dc2ba9 100644 (file)
@@ -16,8 +16,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -83,7 +84,7 @@
        ["Switch pick mode off" gnus-pick-mode gnus-pick-mode]))))
 
 (defun gnus-pick-mode (&optional arg)
-  "Minor mode for provind a pick-and-read interface in Gnus summary buffers."
+  "Minor mode for providing a pick-and-read interface in Gnus summary buffers."
   (interactive "P")
   (when (eq major-mode 'gnus-summary-mode)
     (make-local-variable 'gnus-pick-mode)
        (gnus-pick-make-menu-bar))
       (unless (assq 'gnus-pick-mode minor-mode-alist)
        (push '(gnus-pick-mode " Pick") minor-mode-alist))
-      (unless (assq 'gnus-topic-mode minor-mode-map-alist)
-       (push (cons 'gnus-topic-mode gnus-pick-mode-map)
+      (unless (assq 'gnus-pick-mode minor-mode-map-alist)
+       (push (cons 'gnus-pick-mode gnus-pick-mode-map)
              minor-mode-map-alist))
       (run-hooks 'gnus-pick-mode-hook))))
 
@@ -195,7 +196,8 @@ lines.")
 (defvar gnus-selected-tree-face 'modeline
   "*Face used for highlighting selected articles in the thread tree.")
 
-(defvar gnus-tree-brackets '((?\[ . ?\]) (?\( . ?\)) (?\{ . ?\}))
+(defvar gnus-tree-brackets '((?\[ . ?\]) (?\( . ?\))
+                            (?\{ . ?\}) (?< . ?>))
   "Brackets used in tree nodes.")
 
 (defvar gnus-tree-parent-child-edges '(?- ?\\ ?|)
@@ -324,9 +326,9 @@ Two predefined functions are available:
 (defun gnus-tree-recenter ()
   "Center point in the tree window."
   (let ((selected (selected-window))
-       (cur-window (get-buffer-window (current-buffer) t)))
-    (when cur-window
-      (select-window cur-window)
+       (tree-window (get-buffer-window gnus-tree-buffer t)))
+    (when tree-window
+      (select-window tree-window)
       (when gnus-selected-tree-overlay
        (goto-char (or (gnus-overlay-end gnus-selected-tree-overlay) 1)))
       (let* ((top (cond ((< (window-height) 4) 0)
@@ -340,8 +342,8 @@ Two predefined functions are available:
        ;; possible valid number, or the second line from the top,
        ;; whichever is the least.
        (set-window-start
-        cur-window (min bottom (save-excursion 
-                             (forward-line (- top)) (point)))))
+        tree-window (min bottom (save-excursion 
+                                  (forward-line (- top)) (point)))))
       (select-window selected))))
 
 (defun gnus-get-tree-buffer ()
@@ -373,7 +375,7 @@ Two predefined functions are available:
 
 ;;; Generating the tree.
 
-(defun gnus-tree-node-insert (header sparse)
+(defun gnus-tree-node-insert (header sparse &optional adopted)
   (let* ((dummy (stringp header))
         (header (if (vectorp header) header
                   (progn
@@ -403,10 +405,12 @@ Two predefined functions are available:
          (cond ((memq gnus-tmp-number sparse) 
                 (caadr gnus-tree-brackets))
                (dummy (caaddr gnus-tree-brackets))
+               (adopted (car (nth 3 gnus-tree-brackets)))
                (t (caar gnus-tree-brackets))))
         (gnus-tmp-close-bracket
          (cond ((memq gnus-tmp-number sparse)
                 (cdadr gnus-tree-brackets))
+               (adopted (cdr (nth 3 gnus-tree-brackets)))
                (dummy
                 (cdaddr gnus-tree-brackets))
                (t (cdar gnus-tree-brackets))))
@@ -458,11 +462,12 @@ Two predefined functions are available:
       (gnus-tree-minimize)
       (gnus-tree-recenter)
       (let ((selected (selected-window)))
-       (select-window (get-buffer-window (set-buffer gnus-tree-buffer) t))
-       (gnus-horizontal-recenter)
-       (select-window selected)))))
+       (when (get-buffer-window (set-buffer gnus-tree-buffer) t)
+         (select-window (get-buffer-window (set-buffer gnus-tree-buffer) t))
+         (gnus-horizontal-recenter)
+         (select-window selected))))))
 
-(defun gnus-generate-horizontal-tree (thread level &optional dummyp)
+(defun gnus-generate-horizontal-tree (thread level &optional dummyp adopted)
   "Generate a horizontal tree."
   (let* ((dummy (stringp (car thread)))
         (do (or dummy
@@ -489,7 +494,7 @@ Two predefined functions are available:
          (goto-char beg)))
       (setq dummyp nil)
       ;; Insert the article node.
-      (gnus-tree-node-insert (pop thread) gnus-tmp-sparse))
+      (gnus-tree-node-insert (pop thread) gnus-tmp-sparse adopted))
     (if (null thread)
        ;; End of the thread, so we go to the next line.
        (unless (bolp)
@@ -498,7 +503,7 @@ Two predefined functions are available:
       (while thread
        (gnus-generate-horizontal-tree
         (pop thread) (if do (1+ level) level) 
-        (or dummyp dummy))))))
+        (or dummyp dummy) dummy)))))
 
 (defsubst gnus-tree-indent-vertical ()
   (let ((len (- (* (1+ gnus-tree-node-length) gnus-tmp-indent) 
@@ -513,7 +518,7 @@ Two predefined functions are available:
       (insert "\n")))
   (end-of-line))
 
-(defun gnus-generate-vertical-tree (thread level &optional dummyp)
+(defun gnus-generate-vertical-tree (thread level &optional dummyp adopted)
   "Generate a vertical tree."
   (let* ((dummy (stringp (car thread)))
         (do (or dummy
@@ -547,7 +552,7 @@ Two predefined functions are available:
       (setq dummyp nil)
       ;; Insert the article node.
       (gnus-tree-indent-vertical)
-      (gnus-tree-node-insert (pop thread) gnus-tmp-sparse)
+      (gnus-tree-node-insert (pop thread) gnus-tmp-sparse adopted)
       (gnus-tree-forward-line 1))
     (if (null thread)
        ;; End of the thread, so we go to the next line.
@@ -559,30 +564,36 @@ Two predefined functions are available:
       (while thread
        (gnus-generate-vertical-tree
         (pop thread) (if do (1+ level) level) 
-        (or dummyp dummy))))))
+        (or dummyp dummy) dummy)))))
 
 ;;; Interface functions.
 
 (defun gnus-possibly-generate-tree (article &optional force)
   "Generate the thread tree for ARTICLE if it isn't displayed already."
-  (save-excursion
-    (let ((top (save-excursion
-                (set-buffer gnus-summary-buffer)
-                (gnus-cut-thread
-                 (gnus-remove-thread 
-                  (mail-header-id (gnus-summary-article-header article)) t))))
-         (gnus-tmp-limit gnus-newsgroup-limit)
-         (gnus-tmp-sparse gnus-newsgroup-sparse))
-      (when (or force
-               (not (eq top gnus-tree-displayed-thread)))
-       (gnus-generate-tree top)
-       (setq gnus-tree-displayed-thread top)))))
+  (when (save-excursion
+         (set-buffer gnus-summary-buffer)
+         (and gnus-use-trees
+              (vectorp (gnus-summary-article-header article))))
+    (save-excursion
+      (let ((top (save-excursion
+                  (set-buffer gnus-summary-buffer)
+                  (gnus-cut-thread
+                   (gnus-remove-thread 
+                    (mail-header-id 
+                     (gnus-summary-article-header article)) t))))
+           (gnus-tmp-limit gnus-newsgroup-limit)
+           (gnus-tmp-sparse gnus-newsgroup-sparse))
+       (when (or force
+                 (not (eq top gnus-tree-displayed-thread)))
+         (gnus-generate-tree top)
+         (setq gnus-tree-displayed-thread top))))))
 
 (defun gnus-tree-open (group)
   (gnus-get-tree-buffer))
 
 (defun gnus-tree-close (group)
-  (gnus-kill-buffer gnus-tree-buffer))
+  ;(gnus-kill-buffer gnus-tree-buffer)
+  )
 
 (defun gnus-highlight-selected-tree (article)
   "Highlight the selected article in the tree."
@@ -591,8 +602,7 @@ Two predefined functions are available:
     (set-buffer gnus-tree-buffer)
     (when (setq region (gnus-tree-article-region article))
       (when (or (not gnus-selected-tree-overlay)
-               (and (fboundp 'extent-detached-p)
-                    (extent-detached-p gnus-selected-tree-overlay)))
+               (gnus-extent-detached-p gnus-selected-tree-overlay))
        ;; Create a new overlay.
        (gnus-overlay-put
         (setq gnus-selected-tree-overlay (gnus-make-overlay 1 2))
@@ -603,9 +613,10 @@ Two predefined functions are available:
       (gnus-tree-minimize)
       (gnus-tree-recenter)
       (let ((selected (selected-window)))
-       (select-window (get-buffer-window (set-buffer gnus-tree-buffer) t))
-       (gnus-horizontal-recenter)
-       (select-window selected)))
+       (when (get-buffer-window (set-buffer gnus-tree-buffer) t)
+         (select-window (get-buffer-window (set-buffer gnus-tree-buffer) t))
+         (gnus-horizontal-recenter)
+         (select-window selected))))
     ;; If we remove this save-excursion, it updates the wrong mode lines?!?
     (save-excursion
       (set-buffer gnus-tree-buffer)
@@ -621,7 +632,6 @@ Two predefined functions are available:
        (set-window-point 
         (get-buffer-window (current-buffer) t) (cdr region))))))
 
-
 ;;; Allow redefinition of functions.
 (gnus-ems-redefine)