2001-09-22 Simon Josefsson <jas@extundo.com>
[gnus] / lisp / gnus-salt.el
index df70bf1..1cac7d3 100644 (file)
@@ -1,5 +1,6 @@
 ;;; gnus-salt.el --- alternate summary mode interfaces for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -35,7 +36,8 @@
 ;;;
 
 (defvar gnus-pick-mode nil
-  "Minor mode for providing a pick-and-read interface in Gnus summary buffers.")
+  "Minor mode for providing a pick-and-read interface in Gnus
+summary buffers.")
 
 (defcustom gnus-pick-display-summary nil
   "*Display summary while reading."
   :type 'hook
   :group 'gnus-summary-pick)
 
+(when (featurep 'xemacs)
+  (add-hook 'gnus-pick-mode-hook 'gnus-xmas-pick-menu-add))
+
 (defcustom gnus-mark-unpicked-articles-as-read nil
   "*If non-nil, mark all unpicked articles as read."
   :type 'boolean
   :group 'gnus-summary-pick)
 
 (defcustom gnus-pick-elegant-flow t
-  "If non-nil, gnus-pick-start-reading will run gnus-summary-next-group when no articles have been picked."
+  "If non-nil, `gnus-pick-start-reading' runs
+ `gnus-summary-next-group' when no articles have been picked."
   :type 'boolean
   :group 'gnus-summary-pick)
 
 (defcustom gnus-summary-pick-line-format
-  "%-5P %U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
+  "%-5P %U\%R\%z\%I\%(%[%4L: %-23,23n%]%) %s\n"
   "*The format specification of the lines in pick buffers.
 It accepts the same format specs that `gnus-summary-line-format' does."
   :type 'string
@@ -81,22 +87,22 @@ It accepts the same format specs that `gnus-summary-line-format' does."
 (defun gnus-pick-make-menu-bar ()
   (unless (boundp 'gnus-pick-menu)
     (easy-menu-define
-     gnus-pick-menu gnus-pick-mode-map ""
-     '("Pick"
-       ("Pick"
-       ["Article" gnus-summary-mark-as-processable t]
-       ["Thread" gnus-uu-mark-thread t]
-       ["Region" gnus-uu-mark-region t]
-       ["Regexp" gnus-uu-mark-by-regexp t]
-       ["Buffer" gnus-uu-mark-buffer t])
-       ("Unpick"
-       ["Article" gnus-summary-unmark-as-processable t]
-       ["Thread" gnus-uu-unmark-thread t]
-       ["Region" gnus-uu-unmark-region t]
-       ["Regexp" gnus-uu-unmark-by-regexp t]
-       ["Buffer" gnus-summary-unmark-all-processable t])
-       ["Start reading" gnus-pick-start-reading t]
-       ["Switch pick mode off" gnus-pick-mode gnus-pick-mode]))))
+      gnus-pick-menu gnus-pick-mode-map ""
+      '("Pick"
+       ("Pick"
+        ["Article" gnus-summary-mark-as-processable t]
+        ["Thread" gnus-uu-mark-thread t]
+        ["Region" gnus-uu-mark-region t]
+        ["Regexp" gnus-uu-mark-by-regexp t]
+        ["Buffer" gnus-uu-mark-buffer t])
+       ("Unpick"
+        ["Article" gnus-summary-unmark-as-processable t]
+        ["Thread" gnus-uu-unmark-thread t]
+        ["Region" gnus-uu-unmark-region t]
+        ["Regexp" gnus-uu-unmark-by-regexp t]
+        ["Buffer" gnus-summary-unmark-all-processable t])
+       ["Start reading" gnus-pick-start-reading t]
+       ["Switch pick mode off" gnus-pick-mode gnus-pick-mode]))))
 
 (defun gnus-pick-mode (&optional arg)
   "Minor mode for providing a pick-and-read interface in Gnus summary buffers.
@@ -120,7 +126,8 @@ It accepts the same format specs that `gnus-summary-line-format' does."
       ;; Set up the menu.
       (when (gnus-visual-p 'pick-menu 'menu)
        (gnus-pick-make-menu-bar))
-      (gnus-add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map)
+      (gnus-add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map
+                          nil 'gnus-pick-mode)
       (gnus-run-hooks 'gnus-pick-mode-hook))))
 
 (defun gnus-pick-setup-message ()
@@ -146,11 +153,11 @@ If given a prefix, mark all unpicked articles as read."
   (interactive "P")
   (if gnus-newsgroup-processable
       (progn
-        (gnus-summary-limit-to-articles nil)
-        (when (or catch-up gnus-mark-unpicked-articles-as-read)
+       (gnus-summary-limit-to-articles nil)
+       (when (or catch-up gnus-mark-unpicked-articles-as-read)
          (gnus-summary-limit-mark-excluded-as-read))
-        (gnus-summary-first-article)
-        (gnus-configure-windows
+       (gnus-summary-first-article)
+       (gnus-configure-windows
         (if gnus-pick-display-summary 'article 'pick) t))
     (if gnus-pick-elegant-flow
        (progn
@@ -162,8 +169,8 @@ If given a prefix, mark all unpicked articles as read."
       (error "No articles have been picked"))))
 
 (defun gnus-pick-goto-article (arg)
-  "Go to the article number indicated by ARG.  If ARG is an invalid
-article number, then stay on current line."
+  "Go to the article number indicated by ARG.
+If ARG is an invalid article number, then stay on current line."
   (let (pos)
     (save-excursion
       (goto-char (point-min))
@@ -174,7 +181,7 @@ article number, then stay on current line."
       (goto-char pos))))
 
 (defun gnus-pick-article (&optional arg)
-    "Pick the article on the current line.
+  "Pick the article on the current line.
 If ARG, pick the article on that line instead."
   (interactive "P")
   (when arg
@@ -182,7 +189,7 @@ If ARG, pick the article on that line instead."
   (gnus-summary-mark-as-processable 1))
 
 (defun gnus-pick-article-or-thread (&optional arg)
-  "If gnus-thread-hide-subtree is t, then pick the thread on the current line.
+  "If `gnus-thread-hide-subtree' is t, then pick the thread on the current line.
 Otherwise pick the article on the current line.
 If ARG, pick the article/thread on that line instead."
   (interactive "P")
@@ -196,7 +203,7 @@ If ARG, pick the article/thread on that line instead."
     (gnus-summary-mark-as-processable 1)))
 
 (defun gnus-pick-unmark-article-or-thread (&optional arg)
-  "If gnus-thread-hide-subtree is t, then unmark the thread on current line.
+  "If `gnus-thread-hide-subtree' is t, then unmark the thread on current line.
 Otherwise unmark the article on current line.
 If ARG, unmark thread/article on that line instead."
   (interactive "P")
@@ -221,7 +228,7 @@ This must be bound to a button-down mouse event."
   (let* ((echo-keystrokes 0)
         (start-posn (event-start start-event))
         (start-point (posn-point start-posn))
-         (start-line (1+ (count-lines 1 start-point)))
+        (start-line (1+ (count-lines 1 start-point)))
         (start-window (posn-window start-posn))
         (bounds (gnus-window-edges start-window))
         (top (nth 1 bounds))
@@ -233,7 +240,7 @@ This must be bound to a button-down mouse event."
     (setq mouse-selection-click-count click-count)
     (setq mouse-selection-click-count-buffer (current-buffer))
     (mouse-set-point start-event)
-    ;; In case the down click is in the middle of some intangible text,
+   ;; In case the down click is in the middle of some intangible text,
     ;; use the end of that text, and put it in START-POINT.
     (when (< (point) start-point)
       (goto-char start-point))
@@ -257,14 +264,14 @@ This must be bound to a button-down mouse event."
             ;; Are we moving within the original window?
             ((and (eq (posn-window end) start-window)
                   (integer-or-marker-p end-point))
-             ;; Go to START-POINT first, so that when we move to END-POINT,
+       ;; Go to START-POINT first, so that when we move to END-POINT,
              ;; if it's in the middle of intangible text,
              ;; point jumps in the direction away from START-POINT.
              (goto-char start-point)
              (goto-char end-point)
              (gnus-pick-article)
              ;; In case the user moved his mouse really fast, pick
-             ;; articles on the line between this one and the last one.
+           ;; articles on the line between this one and the last one.
              (let* ((this-line (1+ (count-lines 1 end-point)))
                     (min-line (min this-line start-line))
                     (max-line (max this-line start-line)))
@@ -287,18 +294,18 @@ This must be bound to a button-down mouse event."
       (when (consp event)
        (let ((fun (key-binding (vector (car event)))))
          ;; Run the binding of the terminating up-event, if possible.
-         ;; In the case of a multiple click, it gives the wrong results,
+       ;; In the case of a multiple click, it gives the wrong results,
          ;; because it would fail to set up a region.
          (when nil
-           ;; (and (= (mod mouse-selection-click-count 3) 0) (fboundp fun))
-           ;; In this case, we can just let the up-event execute normally.
+      ;; (and (= (mod mouse-selection-click-count 3) 0) (fboundp fun))
+       ;; In this case, we can just let the up-event execute normally.
            (let ((end (event-end event)))
              ;; Set the position in the event before we replay it,
              ;; because otherwise it may have a position in the wrong
              ;; buffer.
              (setcar (cdr end) end-of-range)
              ;; Delete the overlay before calling the function,
-             ;; because delete-overlay increases buffer-modified-tick.
+            ;; because delete-overlay increases buffer-modified-tick.
              (push event unread-command-events))))))))
 
 (defun gnus-pick-next-page ()
@@ -325,15 +332,15 @@ This must be bound to a button-down mouse event."
   (setq gnus-binary-mode-map (make-sparse-keymap))
 
   (gnus-define-keys
-   gnus-binary-mode-map
-   "g" gnus-binary-show-article))
+      gnus-binary-mode-map
+    "g" gnus-binary-show-article))
 
 (defun gnus-binary-make-menu-bar ()
   (unless (boundp 'gnus-binary-menu)
     (easy-menu-define
-     gnus-binary-menu gnus-binary-mode-map ""
-     '("Pick"
-       ["Switch binary mode off" gnus-binary-mode t]))))
+      gnus-binary-menu gnus-binary-mode-map ""
+      '("Pick"
+       ["Switch binary mode off" gnus-binary-mode t]))))
 
 (defun gnus-binary-mode (&optional arg)
   "Minor mode for providing a binary group interface in Gnus summary buffers."
@@ -352,7 +359,8 @@ This must be bound to a button-down mouse event."
       ;; Set up the menu.
       (when (gnus-visual-p 'binary-menu 'menu)
        (gnus-binary-make-menu-bar))
-      (gnus-add-minor-mode 'gnus-binary-mode " Binary" gnus-binary-mode-map)
+      (gnus-add-minor-mode 'gnus-binary-mode " Binary"
+                          gnus-binary-mode-map nil 'gnus-binary-mode)
       (gnus-run-hooks 'gnus-binary-mode-hook))))
 
 (defun gnus-binary-display-article (article &optional all-header)
@@ -415,6 +423,11 @@ Two predefined functions are available:
   :type 'hook
   :group 'gnus-summary-tree)
 
+(when (featurep 'xemacs)
+  (add-hook 'gnus-tree-mode-hook 'gnus-xmas-tree-menu-add)
+  (add-hook 'gnus-tree-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off))
+
+
 ;;; Internal variables.
 
 (defvar gnus-tree-line-format-alist
@@ -443,13 +456,13 @@ Two predefined functions are available:
   (setq gnus-tree-mode-map (make-keymap))
   (suppress-keymap gnus-tree-mode-map)
   (gnus-define-keys
-   gnus-tree-mode-map
-   "\r" gnus-tree-select-article
-   gnus-mouse-2 gnus-tree-pick-article
-   "\C-?" gnus-tree-read-summary-keys
-   "h" gnus-tree-show-summary
+      gnus-tree-mode-map
+    "\r" gnus-tree-select-article
+    gnus-mouse-2 gnus-tree-pick-article
+    "\C-?" gnus-tree-read-summary-keys
+    "h" gnus-tree-show-summary
 
-   "\C-c\C-i" gnus-info-find-node)
+    "\C-c\C-i" gnus-info-find-node)
 
   (substitute-key-definition
    'undefined 'gnus-tree-read-summary-keys gnus-tree-mode-map))
@@ -457,9 +470,9 @@ Two predefined functions are available:
 (defun gnus-tree-make-menu-bar ()
   (unless (boundp 'gnus-tree-menu)
     (easy-menu-define
-     gnus-tree-menu gnus-tree-mode-map ""
-     '("Tree"
-       ["Select article" gnus-tree-select-article t]))))
+      gnus-tree-menu gnus-tree-mode-map ""
+      '("Tree"
+       ["Select article" gnus-tree-select-article t]))))
 
 (defun gnus-tree-mode ()
   "Major mode for displaying thread trees."
@@ -552,7 +565,7 @@ Two predefined functions are available:
             (bottom (save-excursion (goto-char (point-max))
                                     (forward-line (- height))
                                     (point))))
-       ;; Set the window start to either `bottom', which is the biggest
+      ;; Set the window start to either `bottom', which is the biggest
        ;; possible valid number, or the second line from the top,
        ;; whichever is the least.
        (set-window-start
@@ -653,6 +666,8 @@ Two predefined functions are available:
       (let* ((score (or (cdr (assq article gnus-newsgroup-scored))
                        gnus-summary-default-score 0))
             (default gnus-summary-default-score)
+            (default-high gnus-summary-default-high-score)
+            (default-low gnus-summary-default-low-score)
             (mark (or (gnus-summary-article-mark article) gnus-unread-mark)))
        ;; Eval the cars of the lists until we find a match.
        (while (and list
@@ -844,7 +859,7 @@ Two predefined functions are available:
          (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?!?
+;; If we remove this save-excursion, it updates the wrong mode lines?!?
     (save-excursion
       (set-buffer gnus-tree-buffer)
       (gnus-set-mode-line 'tree))