*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 20:21:30 +0000 (20:21 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 20:21:30 +0000 (20:21 +0000)
lisp/ChangeLog
lisp/gnus-cache.el
lisp/gnus-topic.el
lisp/gnus-vis.el
lisp/gnus.el
lisp/message.el
lisp/nndir.el
lisp/nnmail.el
lisp/nntp.el
lisp/smiley.el
texi/gnus.texi

index 5b144b0..c6fd20b 100644 (file)
@@ -1,3 +1,68 @@
+Tue Jul 30 00:00:28 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * nntp.el (nntp-open-server): Init server buffer.
+
+       * gnus.el (gnus-group-prefixed-name): Do the right thing with nil
+       methods. 
+       (gnus-group-rename-group): Would act oddly when renaming native
+       groups. 
+
+Sat Jul 27 17:46:42 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * message.el (message-check-news-syntax): Use signature
+       separator. 
+
+       * gnus.el (gnus-group-make-group): Beep at "" methods.
+       (gnus-group-make-group): Don't prefix native groups.
+
+       * nnmail.el (nnmail-move-inbox): Bug out on movemail errors.
+
+       * gnus-cache.el (gnus-cache-file-name): Would bug out on group
+       names containing slashes.
+
+       * gnus-topic.el (gnus-topic-check-topology): Make sure all groups
+       in topics are living.
+
+       * nntp.el (nntp-send-strings-to-server): Give a better error
+       message. 
+
+Sat Jul 27 17:33:22 1996  Teddy  <teddy@fukt.hk-r.se>
+
+       * nntp.el (nntp-open-rlogin): Change parameter order.
+
+Sat Jul 27 17:19:47 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus-topic.el (gnus-topic-check-topology): Make sure all
+       topologies have alists.
+
+Wed Jul 24 08:23:26 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.el (gnus-group-jump-to-group): Don't activate group.
+
+Wed Jul 24 07:47:47 1996  Katsumi Yamaoka  <yamaoka@ga.sony.co.jp>
+
+       * message.el (message-rename-buffer): Rename autosave name.
+
+Wed Jul 24 06:24:07 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-vis.el (gnus-group-make-menu-bar): Moved Misc menu last.
+       (gnus-summary-make-menu-bar): Ditto.
+
+Sat Jul 20 00:59:22 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * smiley.el (smiley-buffer): Only do smilies under X.
+
+       * gnus.el (gnus-make-directory): Beep on nil dirs.
+       (gnus-article-archive-name): Prepend the save directory.
+
+Fri Jul 19 23:08:52 1996  Hallvard B. Furuseth  <hallvard@menja.ifi.uio.no>
+
+       * message.el (message-y-or-n-p): Doc fix.
+
+Fri Jul 19 02:12:58 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.el: Gnus v5.2.37 is released.
+
 Fri Jul 19 00:31:22 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.el (gnus-subscribe-newsgroup): Add new groups to top-level
index cb770a8..9e02be1 100644 (file)
@@ -374,9 +374,10 @@ Returns the list of articles removed."
          (file-name-as-directory
           (if (gnus-use-long-file-name 'not-cache)
               group 
-            (let ((group (concat group "")))
-              (if (string-match ":" group)
-                  (aset group (match-beginning 0) ?/))
+            (let ((group (nnheader-replace-chars-in-string group ?/ ?_)))
+              ;; Translate the first colon into a slash.
+              (when (string-match ":" group)
+                (aset group (match-beginning 0) ?/))
               (nnheader-replace-chars-in-string group ?. ?/))))
          (if (stringp article) article (int-to-string article))))
 
index 163c7e3..9e29c9f 100644 (file)
@@ -378,6 +378,7 @@ articles in the topic and its subtopics."
        gnus-topic-tallied-groups nil
        gnus-topology-checked-p nil))
 
+
 (defun gnus-topic-check-topology ()  
   ;; The first time we set the topology to whatever we have
   ;; gotten here, which can be rather random.
@@ -385,6 +386,8 @@ articles in the topic and its subtopics."
     (gnus-topic-init-alist))
 
   (setq gnus-topology-checked-p t)
+  ;; Go through the topic alist and make sure that all topics
+  ;; are in the topic topology.
   (let ((topics (gnus-topic-list))
        (alist gnus-topic-alist)
        changed)
@@ -395,7 +398,15 @@ articles in the topic and its subtopics."
        (setq changed t))
       (setq alist (cdr alist)))
     (when changed
-      (gnus-topic-enter-dribble)))
+      (gnus-topic-enter-dribble))
+    ;; Conversely, go through the topology and make sure that all
+    ;; topologies have alists.
+    (while topics
+      (unless (assoc (car topics) gnus-topic-alist)
+       (push (list (car topics)) gnus-topic-alist))
+      (pop topics)))
+  ;; Go through all living groups and make sure that
+  ;; they belong to some topic.
   (let* ((tgroups (apply 'append (mapcar (lambda (entry) (cdr entry))
                                         gnus-topic-alist)))
         (entry (assoc (caar gnus-topic-topology) gnus-topic-alist))
@@ -403,7 +414,15 @@ articles in the topic and its subtopics."
         group)
     (while newsrc
       (unless (member (setq group (gnus-info-group (pop newsrc))) tgroups)
-       (setcdr entry (cons group (cdr entry)))))))
+       (setcdr entry (cons group (cdr entry))))))
+  ;; Go through all topics and make sure they contain only living groups.
+  (let ((alist gnus-topic-alist)
+       topic)
+    (while (setq topic (pop alist))
+      (while (cdr topic)
+       (if (gnus-gethash (cadr topic) gnus-newsrc-hashtb)
+           (setq topic (cdr topic))
+         (setcdr topic (cddr topic)))))))
 
 (defvar gnus-tmp-topics nil)
 (defun gnus-topic-list (&optional topology)
index d96abf6..fb18851 100644 (file)
@@ -301,166 +301,166 @@ HEADER is a regexp to match a header.  For a fuller explanation, see
 
 (defun gnus-group-make-menu-bar ()
   (gnus-visual-turn-off-edit-menu 'group)
-  (or 
-   (boundp 'gnus-group-reading-menu)
-   (progn
-     (easy-menu-define
-      gnus-group-reading-menu gnus-group-mode-map ""
-      '("Group"
-       ["Read" gnus-group-read-group (gnus-group-group-name)]
-       ["Select" gnus-group-select-group (gnus-group-group-name)]
-       ["See old articles" (gnus-group-select-group 'all)
-        :keys "C-u SPC" :active (gnus-group-group-name)]
-       ["Catch up" gnus-group-catchup-current (gnus-group-group-name)]
-       ["Catch up all articles" gnus-group-catchup-current-all
-        (gnus-group-group-name)]
-       ["Check for new articles" gnus-group-get-new-news-this-group
-        (gnus-group-group-name)]
-       ["Toggle subscription" gnus-group-unsubscribe-current-group
-        (gnus-group-group-name)]
-       ["Kill" gnus-group-kill-group (gnus-group-group-name)]
-       ["Yank" gnus-group-yank-group gnus-list-of-killed-groups]
-       ["Describe" gnus-group-describe-group (gnus-group-group-name)]
-       ["Fetch FAQ" gnus-group-fetch-faq (gnus-group-group-name)]
-       ["Edit kill file" gnus-group-edit-local-kill
-        (gnus-group-group-name)]
-       ;; Actually one should check, if any of the marked groups gives t for
-       ;; (gnus-check-backend-function 'request-expire-articles ...)
-       ["Expire articles" gnus-group-expire-articles
-        (or (and (gnus-group-group-name)
-                 (gnus-check-backend-function
-                  'request-expire-articles
-                  (gnus-group-group-name))) gnus-group-marked)]
-       ["Set group level" gnus-group-set-current-level
-        (gnus-group-group-name)]
-       ["Select quick" gnus-group-quick-select-group (gnus-group-group-name)]
-       ))
+  (unless (boundp 'gnus-group-reading-menu)
+
+    (easy-menu-define
+     gnus-group-reading-menu gnus-group-mode-map ""
+     '("Group"
+       ["Read" gnus-group-read-group (gnus-group-group-name)]
+       ["Select" gnus-group-select-group (gnus-group-group-name)]
+       ["See old articles" (gnus-group-select-group 'all)
+       :keys "C-u SPC" :active (gnus-group-group-name)]
+       ["Catch up" gnus-group-catchup-current (gnus-group-group-name)]
+       ["Catch up all articles" gnus-group-catchup-current-all
+       (gnus-group-group-name)]
+       ["Check for new articles" gnus-group-get-new-news-this-group
+       (gnus-group-group-name)]
+       ["Toggle subscription" gnus-group-unsubscribe-current-group
+       (gnus-group-group-name)]
+       ["Kill" gnus-group-kill-group (gnus-group-group-name)]
+       ["Yank" gnus-group-yank-group gnus-list-of-killed-groups]
+       ["Describe" gnus-group-describe-group (gnus-group-group-name)]
+       ["Fetch FAQ" gnus-group-fetch-faq (gnus-group-group-name)]
+       ["Edit kill file" gnus-group-edit-local-kill
+       (gnus-group-group-name)]
+       ;; Actually one should check, if any of the marked groups gives t for
+       ;; (gnus-check-backend-function 'request-expire-articles ...)
+       ["Expire articles" gnus-group-expire-articles
+       (or (and (gnus-group-group-name)
+                (gnus-check-backend-function
+                 'request-expire-articles
+                 (gnus-group-group-name))) gnus-group-marked)]
+       ["Set group level" gnus-group-set-current-level
+       (gnus-group-group-name)]
+       ["Select quick" gnus-group-quick-select-group (gnus-group-group-name)]
+       ))
   
-     (easy-menu-define
-      gnus-group-group-menu gnus-group-mode-map ""
-      '("Groups"
-       ("Listing"
-        ["List unread subscribed groups" gnus-group-list-groups t]
-        ["List (un)subscribed groups" gnus-group-list-all-groups t]
-        ["List killed groups" gnus-group-list-killed gnus-killed-list]
-        ["List zombie groups" gnus-group-list-zombies gnus-zombie-list]
-        ["List level..." gnus-group-list-level t]
-        ["Describe all groups" gnus-group-describe-all-groups t]
-        ["Group apropos..." gnus-group-apropos t]
-        ["Group and description apropos..." gnus-group-description-apropos t]
-        ["List groups matching..." gnus-group-list-matching t]
-        ["List all groups matching..." gnus-group-list-all-matching t]
-        ["List active file" gnus-group-list-active t])
-       ("Sort"
-        ["Default sort" gnus-group-sort-groups
-         (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
-        ["Sort by method" gnus-group-sort-groups-by-method
-         (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
-        ["Sort by rank" gnus-group-sort-groups-by-rank
-         (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
-        ["Sort by score" gnus-group-sort-groups-by-score
-         (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
-        ["Sort by level" gnus-group-sort-groups-by-level
-         (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
-        ["Sort by unread" gnus-group-sort-groups-by-unread
-         (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
-        ["Sort by name" gnus-group-sort-groups-by-alphabet
-         (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))])
-       ("Mark"
-        ["Mark group" gnus-group-mark-group
-         (and (gnus-group-group-name)
-              (not (memq (gnus-group-group-name) gnus-group-marked)))]
-        ["Unmark group" gnus-group-unmark-group
-         (and (gnus-group-group-name)
-              (memq (gnus-group-group-name) gnus-group-marked))]
-        ["Unmark all" gnus-group-unmark-all-groups gnus-group-marked]
-        ["Mark regexp..." gnus-group-mark-regexp t]
-        ["Mark region" gnus-group-mark-region t]
-        ["Mark buffer" gnus-group-mark-buffer t]
-        ["Execute command" gnus-group-universal-argument
-         (or gnus-group-marked (gnus-group-group-name))])
-       ("Subscribe"
-        ["Subscribe to a group" gnus-group-unsubscribe-group t]
-        ["Kill all newsgroups in region" gnus-group-kill-region t]
-        ["Kill all zombie groups" gnus-group-kill-all-zombies
-         gnus-zombie-list]
-        ["Kill all groups on level..." gnus-group-kill-level t])
-       ("Foreign groups"
-        ["Make a foreign group" gnus-group-make-group t]
-        ["Add a directory group" gnus-group-make-directory-group t]
-        ["Add the help group" gnus-group-make-help-group t]
-        ["Add the archive group" gnus-group-make-archive-group t]
-        ["Make a doc group" gnus-group-make-doc-group t]
-        ["Make a kiboze group" gnus-group-make-kiboze-group t]
-        ["Make a virtual group" gnus-group-make-empty-virtual t]
-        ["Add a group to a virtual" gnus-group-add-to-virtual t]
-        ["Rename group" gnus-group-rename-group
-         (gnus-check-backend-function
-          'request-rename-group (gnus-group-group-name))]
-        ["Delete group" gnus-group-delete-group
-         (gnus-check-backend-function
-          'request-delete-group (gnus-group-group-name))])
-       ("Editing groups"
-        ["Parameters" gnus-group-edit-group-parameters
-         (gnus-group-group-name)]
-        ["Select method" gnus-group-edit-group-method
-         (gnus-group-group-name)]
-        ["Info" gnus-group-edit-group (gnus-group-group-name)])
-       ("Score file"
-        ["Flush cache" gnus-score-flush-cache
-         (or gnus-score-cache gnus-short-name-score-file-cache)])
-       ("Move"
-        ["Next" gnus-group-next-group t]
-        ["Previous" gnus-group-prev-group t]
-        ["Next unread" gnus-group-next-unread-group t]
-        ["Previous unread" gnus-group-prev-unread-group t]
-        ["Next unread same level" gnus-group-next-unread-group-same-level t]
-        ["Previous unread same level"
-         gnus-group-previous-unread-group-same-level t]
-        ["Jump to group" gnus-group-jump-to-group t]
-        ["First unread group" gnus-group-first-unread-group t]
-        ["Best unread group" gnus-group-best-unread-group t])
-       ["Transpose" gnus-group-transpose-groups
+    (easy-menu-define
+     gnus-group-group-menu gnus-group-mode-map ""
+     '("Groups"
+       ("Listing"
+       ["List unread subscribed groups" gnus-group-list-groups t]
+       ["List (un)subscribed groups" gnus-group-list-all-groups t]
+       ["List killed groups" gnus-group-list-killed gnus-killed-list]
+       ["List zombie groups" gnus-group-list-zombies gnus-zombie-list]
+       ["List level..." gnus-group-list-level t]
+       ["Describe all groups" gnus-group-describe-all-groups t]
+       ["Group apropos..." gnus-group-apropos t]
+       ["Group and description apropos..." gnus-group-description-apropos t]
+       ["List groups matching..." gnus-group-list-matching t]
+       ["List all groups matching..." gnus-group-list-all-matching t]
+       ["List active file" gnus-group-list-active t])
+       ("Sort"
+       ["Default sort" gnus-group-sort-groups
+        (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
+       ["Sort by method" gnus-group-sort-groups-by-method
+        (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
+       ["Sort by rank" gnus-group-sort-groups-by-rank
+        (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
+       ["Sort by score" gnus-group-sort-groups-by-score
+        (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
+       ["Sort by level" gnus-group-sort-groups-by-level
+        (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
+       ["Sort by unread" gnus-group-sort-groups-by-unread
+        (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))]
+       ["Sort by name" gnus-group-sort-groups-by-alphabet
+        (or (not (boundp 'gnus-topic-mode)) (not gnus-topic-mode))])
+       ("Mark"
+       ["Mark group" gnus-group-mark-group
+        (and (gnus-group-group-name)
+             (not (memq (gnus-group-group-name) gnus-group-marked)))]
+       ["Unmark group" gnus-group-unmark-group
+        (and (gnus-group-group-name)
+             (memq (gnus-group-group-name) gnus-group-marked))]
+       ["Unmark all" gnus-group-unmark-all-groups gnus-group-marked]
+       ["Mark regexp..." gnus-group-mark-regexp t]
+       ["Mark region" gnus-group-mark-region t]
+       ["Mark buffer" gnus-group-mark-buffer t]
+       ["Execute command" gnus-group-universal-argument
+        (or gnus-group-marked (gnus-group-group-name))])
+       ("Subscribe"
+       ["Subscribe to a group" gnus-group-unsubscribe-group t]
+       ["Kill all newsgroups in region" gnus-group-kill-region t]
+       ["Kill all zombie groups" gnus-group-kill-all-zombies
+        gnus-zombie-list]
+       ["Kill all groups on level..." gnus-group-kill-level t])
+       ("Foreign groups"
+       ["Make a foreign group" gnus-group-make-group t]
+       ["Add a directory group" gnus-group-make-directory-group t]
+       ["Add the help group" gnus-group-make-help-group t]
+       ["Add the archive group" gnus-group-make-archive-group t]
+       ["Make a doc group" gnus-group-make-doc-group t]
+       ["Make a kiboze group" gnus-group-make-kiboze-group t]
+       ["Make a virtual group" gnus-group-make-empty-virtual t]
+       ["Add a group to a virtual" gnus-group-add-to-virtual t]
+       ["Rename group" gnus-group-rename-group
+        (gnus-check-backend-function
+         'request-rename-group (gnus-group-group-name))]
+       ["Delete group" gnus-group-delete-group
+        (gnus-check-backend-function
+         'request-delete-group (gnus-group-group-name))])
+       ("Editing groups"
+       ["Parameters" gnus-group-edit-group-parameters
         (gnus-group-group-name)]
-       ["Read a directory as a group..." gnus-group-enter-directory t]
-       ))
+       ["Select method" gnus-group-edit-group-method
+        (gnus-group-group-name)]
+       ["Info" gnus-group-edit-group (gnus-group-group-name)])
+       ("Score file"
+       ["Flush cache" gnus-score-flush-cache
+        (or gnus-score-cache gnus-short-name-score-file-cache)])
+       ("Move"
+       ["Next" gnus-group-next-group t]
+       ["Previous" gnus-group-prev-group t]
+       ["Next unread" gnus-group-next-unread-group t]
+       ["Previous unread" gnus-group-prev-unread-group t]
+       ["Next unread same level" gnus-group-next-unread-group-same-level t]
+       ["Previous unread same level"
+        gnus-group-previous-unread-group-same-level t]
+       ["Jump to group" gnus-group-jump-to-group t]
+       ["First unread group" gnus-group-first-unread-group t]
+       ["Best unread group" gnus-group-best-unread-group t])
+       ["Transpose" gnus-group-transpose-groups
+       (gnus-group-group-name)]
+       ["Read a directory as a group..." gnus-group-enter-directory t]
+       ))
 
-     (easy-menu-define
-      gnus-group-misc-menu gnus-group-mode-map ""
-      '("Misc"
-       ["Send a bug report" gnus-bug t]
-       ["Send a mail" gnus-group-mail t]
-       ["Post an article..." gnus-group-post-news t]
-       ["Customize score file" gnus-score-customize t]
-       ["Check for new news" gnus-group-get-new-news t]     
-       ["Activate all groups" gnus-activate-all-groups t]
-       ["Delete bogus groups" gnus-group-check-bogus-groups t]
-       ["Find new newsgroups" gnus-find-new-newsgroups t]
-       ["Restart Gnus" gnus-group-restart t]
-       ["Read init file" gnus-group-read-init-file t]
-       ["Browse foreign server" gnus-group-browse-foreign-server t]
-       ["Enter server buffer" gnus-group-enter-server-mode t]
-       ["Expire all expirable articles" gnus-group-expire-all-groups t]
-       ["Generate any kiboze groups" nnkiboze-generate-groups t]
-       ["Gnus version" gnus-version t]
-       ["Save .newsrc files" gnus-group-save-newsrc t]
-       ["Suspend Gnus" gnus-group-suspend t]
-       ["Clear dribble buffer" gnus-group-clear-dribble t]
-       ["Exit from Gnus" gnus-group-exit t]
-       ["Exit without saving" gnus-group-quit t]
-       ["Edit global kill file" gnus-group-edit-global-kill t]
-       ["Read manual" gnus-info-find-node t]
-       ["Toggle topics" gnus-topic-mode t]
-       ("SOUP"
-        ["Pack replies" nnsoup-pack-replies (fboundp 'nnsoup-request-group)]
-        ["Send replies" gnus-soup-send-replies
-         (fboundp 'gnus-soup-pack-packet)]
-        ["Pack packet" gnus-soup-pack-packet (fboundp 'gnus-soup-pack-packet)]
-        ["Save areas" gnus-soup-save-areas (fboundp 'gnus-soup-pack-packet)]
-        ["Brew SOUP" gnus-soup-brew-soup (fboundp 'gnus-soup-pack-packet)])
-       ))
-     (run-hooks 'gnus-group-menu-hook)
-     )))
+    (easy-menu-define
+     gnus-group-misc-menu gnus-group-mode-map ""
+     '("Misc"
+       ["Send a bug report" gnus-bug t]
+       ["Send a mail" gnus-group-mail t]
+       ["Post an article..." gnus-group-post-news t]
+       ["Customize score file" gnus-score-customize t]
+       ["Check for new news" gnus-group-get-new-news t]     
+       ["Activate all groups" gnus-activate-all-groups t]
+       ["Delete bogus groups" gnus-group-check-bogus-groups t]
+       ["Find new newsgroups" gnus-find-new-newsgroups t]
+       ["Restart Gnus" gnus-group-restart t]
+       ["Read init file" gnus-group-read-init-file t]
+       ["Browse foreign server" gnus-group-browse-foreign-server t]
+       ["Enter server buffer" gnus-group-enter-server-mode t]
+       ["Expire all expirable articles" gnus-group-expire-all-groups t]
+       ["Generate any kiboze groups" nnkiboze-generate-groups t]
+       ["Gnus version" gnus-version t]
+       ["Save .newsrc files" gnus-group-save-newsrc t]
+       ["Suspend Gnus" gnus-group-suspend t]
+       ["Clear dribble buffer" gnus-group-clear-dribble t]
+       ["Edit global kill file" gnus-group-edit-global-kill t]
+       ["Read manual" gnus-info-find-node t]
+       ["Toggle topics" gnus-topic-mode t]
+       ("SOUP"
+       ["Pack replies" nnsoup-pack-replies (fboundp 'nnsoup-request-group)]
+       ["Send replies" gnus-soup-send-replies
+        (fboundp 'gnus-soup-pack-packet)]
+       ["Pack packet" gnus-soup-pack-packet (fboundp 'gnus-soup-pack-packet)]
+       ["Save areas" gnus-soup-save-areas (fboundp 'gnus-soup-pack-packet)]
+       ["Brew SOUP" gnus-soup-brew-soup (fboundp 'gnus-soup-pack-packet)])
+       ["Exit from Gnus" gnus-group-exit t]
+       ["Exit without saving" gnus-group-quit t]
+       ))
+
+    (run-hooks 'gnus-group-menu-hook)
+    ))
 
 ;; Summary buffer
 (defun gnus-summary-make-menu-bar ()
@@ -468,110 +468,6 @@ HEADER is a regexp to match a header.  For a fuller explanation, see
 
   (unless (boundp 'gnus-summary-misc-menu)
 
-    (easy-menu-define
-     gnus-summary-misc-menu gnus-summary-mode-map ""
-     '("Misc"
-       ("Mark"
-       ("Read"
-        ["Mark as read" gnus-summary-mark-as-read-forward t]
-        ["Mark same subject and select"
-         gnus-summary-kill-same-subject-and-select t]
-        ["Mark same subject" gnus-summary-kill-same-subject t]
-        ["Catchup" gnus-summary-catchup t]
-        ["Catchup all" gnus-summary-catchup-all t]
-        ["Catchup to here" gnus-summary-catchup-to-here t]
-        ["Catchup region" gnus-summary-mark-region-as-read t]
-        ["Mark excluded" gnus-summary-limit-mark-excluded-as-read t])
-       ("Various"
-        ["Tick" gnus-summary-tick-article-forward t]
-        ["Mark as dormant" gnus-summary-mark-as-dormant t]
-        ["Remove marks" gnus-summary-clear-mark-forward t]
-        ["Set expirable mark" gnus-summary-mark-as-expirable t]
-        ["Set bookmark" gnus-summary-set-bookmark t]
-        ["Remove bookmark" gnus-summary-remove-bookmark t])
-       ("Limit"
-        ["Marks..." gnus-summary-limit-to-marks t]
-        ["Subject..." gnus-summary-limit-to-subject t]
-        ["Author..." gnus-summary-limit-to-author t]
-        ["Score" gnus-summary-limit-to-score t]
-        ["Unread" gnus-summary-limit-to-unread t]
-        ["Non-dormant" gnus-summary-limit-exclude-dormant t]
-        ["Articles" gnus-summary-limit-to-articles t]
-        ["Pop limit" gnus-summary-pop-limit t]
-        ["Show dormant" gnus-summary-limit-include-dormant t]
-        ["Hide childless dormant" 
-         gnus-summary-limit-exclude-childless-dormant t]
-        ;;["Hide thread" gnus-summary-limit-exclude-thread t]
-        ["Show expunged" gnus-summary-show-all-expunged t])
-       ("Process mark"
-        ["Set mark" gnus-summary-mark-as-processable t]
-        ["Remove mark" gnus-summary-unmark-as-processable t]
-        ["Remove all marks" gnus-summary-unmark-all-processable t]
-        ["Mark above" gnus-uu-mark-over t]
-        ["Mark series" gnus-uu-mark-series t]
-        ["Mark region" gnus-uu-mark-region t]
-        ["Mark by regexp..." gnus-uu-mark-by-regexp t]
-        ["Mark all" gnus-uu-mark-all t]
-        ["Mark buffer" gnus-uu-mark-buffer t]
-        ["Mark sparse" gnus-uu-mark-sparse t]
-        ["Mark thread" gnus-uu-mark-thread t]
-        ["Unmark thread" gnus-uu-unmark-thread t]))
-       ("Scroll article"
-       ["Page forward" gnus-summary-next-page t]
-       ["Page backward" gnus-summary-prev-page t]
-       ["Line forward" gnus-summary-scroll-up t])
-       ("Move"
-       ["Next unread article" gnus-summary-next-unread-article t]
-       ["Previous unread article" gnus-summary-prev-unread-article t]
-       ["Next article" gnus-summary-next-article t]
-       ["Previous article" gnus-summary-prev-article t]
-       ["Next unread subject" gnus-summary-next-unread-subject t]
-       ["Previous unread subject" gnus-summary-prev-unread-subject t]
-       ["Next article same subject" gnus-summary-next-same-subject t]
-       ["Previous article same subject" gnus-summary-prev-same-subject t]
-       ["First unread article" gnus-summary-first-unread-article t]
-       ["Best unread article" gnus-summary-best-unread-article t]
-       ["Go to subject number..." gnus-summary-goto-subject t]
-       ["Go to article number..." gnus-summary-goto-article t]
-       ["Go to the last article" gnus-summary-goto-last-article t]
-       ["Pop article off history" gnus-summary-pop-article t]) 
-       ("Sort"
-       ["Sort by number" gnus-summary-sort-by-number t]
-       ["Sort by author" gnus-summary-sort-by-author t]
-       ["Sort by subject" gnus-summary-sort-by-subject t]
-       ["Sort by date" gnus-summary-sort-by-date t]
-       ["Sort by score" gnus-summary-sort-by-score t])
-       ("Exit"
-       ["Catchup and exit" gnus-summary-catchup-and-exit t]
-       ["Catchup all and exit" gnus-summary-catchup-and-exit t]
-       ["Catchup and goto next" gnus-summary-catchup-and-goto-next-group t]
-       ["Exit group" gnus-summary-exit t]
-       ["Exit group without updating" gnus-summary-exit-no-update t]
-       ["Exit and goto next group" gnus-summary-next-group t]
-       ["Exit and goto prev group" gnus-summary-prev-group t]
-       ["Reselect group" gnus-summary-reselect-current-group t]
-       ["Rescan group" gnus-summary-rescan-group t])
-       ("Help"
-       ["Fetch group FAQ" gnus-summary-fetch-faq t]
-       ["Describe group" gnus-summary-describe-group t]
-       ["Read manual" gnus-info-find-node t])
-       ("Cache"
-       ["Enter article" gnus-cache-enter-article t]
-       ["Remove article" gnus-cache-remove-article t])
-       ("Modes"
-       ["Pick and read" gnus-pick-mode t]
-       ["Binary" gnus-binary-mode t])
-       ["Filter articles..." gnus-summary-execute-command t]
-       ["Run command on subjects..." gnus-summary-universal-argument t]
-       ["Toggle line truncation" gnus-summary-toggle-truncation t]
-       ["Expand window" gnus-summary-expand-window t]
-       ["Expire expirable articles" gnus-summary-expire-articles
-       (gnus-check-backend-function
-        'request-expire-articles gnus-newsgroup-name)]
-       ["Edit local kill file" gnus-summary-edit-local-kill t]
-       ["Edit main kill file" gnus-summary-edit-global-kill t]
-       ))
-
     (easy-menu-define
      gnus-summary-kill-menu gnus-summary-mode-map ""
      (cons
@@ -830,6 +726,110 @@ HEADER is a regexp to match a header.  For a fuller explanation, see
        ;;["Send" gnus-summary-send-draft t]
        ;;["Send bounced" gnus-resend-bounced-mail t])
        ))
+
+    (easy-menu-define
+     gnus-summary-misc-menu gnus-summary-mode-map ""
+     '("Misc"
+       ("Mark"
+       ("Read"
+        ["Mark as read" gnus-summary-mark-as-read-forward t]
+        ["Mark same subject and select"
+         gnus-summary-kill-same-subject-and-select t]
+        ["Mark same subject" gnus-summary-kill-same-subject t]
+        ["Catchup" gnus-summary-catchup t]
+        ["Catchup all" gnus-summary-catchup-all t]
+        ["Catchup to here" gnus-summary-catchup-to-here t]
+        ["Catchup region" gnus-summary-mark-region-as-read t]
+        ["Mark excluded" gnus-summary-limit-mark-excluded-as-read t])
+       ("Various"
+        ["Tick" gnus-summary-tick-article-forward t]
+        ["Mark as dormant" gnus-summary-mark-as-dormant t]
+        ["Remove marks" gnus-summary-clear-mark-forward t]
+        ["Set expirable mark" gnus-summary-mark-as-expirable t]
+        ["Set bookmark" gnus-summary-set-bookmark t]
+        ["Remove bookmark" gnus-summary-remove-bookmark t])
+       ("Limit"
+        ["Marks..." gnus-summary-limit-to-marks t]
+        ["Subject..." gnus-summary-limit-to-subject t]
+        ["Author..." gnus-summary-limit-to-author t]
+        ["Score" gnus-summary-limit-to-score t]
+        ["Unread" gnus-summary-limit-to-unread t]
+        ["Non-dormant" gnus-summary-limit-exclude-dormant t]
+        ["Articles" gnus-summary-limit-to-articles t]
+        ["Pop limit" gnus-summary-pop-limit t]
+        ["Show dormant" gnus-summary-limit-include-dormant t]
+        ["Hide childless dormant" 
+         gnus-summary-limit-exclude-childless-dormant t]
+        ;;["Hide thread" gnus-summary-limit-exclude-thread t]
+        ["Show expunged" gnus-summary-show-all-expunged t])
+       ("Process mark"
+        ["Set mark" gnus-summary-mark-as-processable t]
+        ["Remove mark" gnus-summary-unmark-as-processable t]
+        ["Remove all marks" gnus-summary-unmark-all-processable t]
+        ["Mark above" gnus-uu-mark-over t]
+        ["Mark series" gnus-uu-mark-series t]
+        ["Mark region" gnus-uu-mark-region t]
+        ["Mark by regexp..." gnus-uu-mark-by-regexp t]
+        ["Mark all" gnus-uu-mark-all t]
+        ["Mark buffer" gnus-uu-mark-buffer t]
+        ["Mark sparse" gnus-uu-mark-sparse t]
+        ["Mark thread" gnus-uu-mark-thread t]
+        ["Unmark thread" gnus-uu-unmark-thread t]))
+       ("Scroll article"
+       ["Page forward" gnus-summary-next-page t]
+       ["Page backward" gnus-summary-prev-page t]
+       ["Line forward" gnus-summary-scroll-up t])
+       ("Move"
+       ["Next unread article" gnus-summary-next-unread-article t]
+       ["Previous unread article" gnus-summary-prev-unread-article t]
+       ["Next article" gnus-summary-next-article t]
+       ["Previous article" gnus-summary-prev-article t]
+       ["Next unread subject" gnus-summary-next-unread-subject t]
+       ["Previous unread subject" gnus-summary-prev-unread-subject t]
+       ["Next article same subject" gnus-summary-next-same-subject t]
+       ["Previous article same subject" gnus-summary-prev-same-subject t]
+       ["First unread article" gnus-summary-first-unread-article t]
+       ["Best unread article" gnus-summary-best-unread-article t]
+       ["Go to subject number..." gnus-summary-goto-subject t]
+       ["Go to article number..." gnus-summary-goto-article t]
+       ["Go to the last article" gnus-summary-goto-last-article t]
+       ["Pop article off history" gnus-summary-pop-article t]) 
+       ("Sort"
+       ["Sort by number" gnus-summary-sort-by-number t]
+       ["Sort by author" gnus-summary-sort-by-author t]
+       ["Sort by subject" gnus-summary-sort-by-subject t]
+       ["Sort by date" gnus-summary-sort-by-date t]
+       ["Sort by score" gnus-summary-sort-by-score t])
+       ("Help"
+       ["Fetch group FAQ" gnus-summary-fetch-faq t]
+       ["Describe group" gnus-summary-describe-group t]
+       ["Read manual" gnus-info-find-node t])
+       ("Cache"
+       ["Enter article" gnus-cache-enter-article t]
+       ["Remove article" gnus-cache-remove-article t])
+       ("Modes"
+       ["Pick and read" gnus-pick-mode t]
+       ["Binary" gnus-binary-mode t])
+       ["Filter articles..." gnus-summary-execute-command t]
+       ["Run command on subjects..." gnus-summary-universal-argument t]
+       ["Toggle line truncation" gnus-summary-toggle-truncation t]
+       ["Expand window" gnus-summary-expand-window t]
+       ["Expire expirable articles" gnus-summary-expire-articles
+       (gnus-check-backend-function
+        'request-expire-articles gnus-newsgroup-name)]
+       ["Edit local kill file" gnus-summary-edit-local-kill t]
+       ["Edit main kill file" gnus-summary-edit-global-kill t]
+       ("Exit"
+       ["Catchup and exit" gnus-summary-catchup-and-exit t]
+       ["Catchup all and exit" gnus-summary-catchup-and-exit t]
+       ["Catchup and goto next" gnus-summary-catchup-and-goto-next-group t]
+       ["Exit group" gnus-summary-exit t]
+       ["Exit group without updating" gnus-summary-exit-no-update t]
+       ["Exit and goto next group" gnus-summary-next-group t]
+       ["Exit and goto prev group" gnus-summary-prev-group t]
+       ["Reselect group" gnus-summary-reselect-current-group t]
+       ["Rescan group" gnus-summary-rescan-group t])))
+
     (run-hooks 'gnus-summary-menu-hook)
     ))
 
index 8372000..aa88b1f 100644 (file)
@@ -1774,7 +1774,7 @@ variable (string, integer, character, etc).")
   "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
   "The mail address of the Gnus maintainers.")
 
-(defconst gnus-version-number "5.2.37"
+(defconst gnus-version-number "5.2.38"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Gnus v%s" gnus-version-number)
@@ -3117,6 +3117,8 @@ the first newsgroup."
 
 (defun gnus-make-directory (dir)
   "Make DIRECTORY recursively."
+  (unless dir
+    (error "No directory to make"))
   ;; Why don't we use `(make-directory dir 'parents)'?  That's just one
   ;; of the many mysteries of the universe.
   (let* ((dir (expand-file-name dir default-directory))
@@ -4823,15 +4825,17 @@ If REGEXP, only list groups matching REGEXP."
 (defun gnus-group-prefixed-name (group method)
   "Return the whole name from GROUP and METHOD."
   (and (stringp method) (setq method (gnus-server-to-method method)))
-  (concat (format "%s" (car method))
-         (if (and
-              (or (assoc (format "%s" (car method)) 
-                         (gnus-methods-using 'address))
-                  (gnus-server-equal method gnus-message-archive-method))
-              (nth 1 method)
-              (not (string= (nth 1 method) "")))
-             (concat "+" (nth 1 method)))
-         ":" group))
+  (if (not method)
+      group
+    (concat (format "%s" (car method))
+           (if (and
+                (or (assoc (format "%s" (car method)) 
+                           (gnus-methods-using 'address))
+                    (gnus-server-equal method gnus-message-archive-method))
+                (nth 1 method)
+                (not (string= (nth 1 method) "")))
+               (concat "+" (nth 1 method)))
+           ":" group)))
 
 (defun gnus-group-real-prefix (group)
   "Return the prefix of the current group name."
@@ -5512,6 +5516,7 @@ Returns whether the fetching was successful or not."
          (goto-char b)
        ;; ... or insert the line.
        (or
+        t ;; Don't activate group.
         (gnus-active group)
         (gnus-activate-group group)
         (error "%s error: %s" group (gnus-status-message group)))
@@ -5655,19 +5660,24 @@ ADDRESS."
           (completing-read
            "Method: " (append gnus-valid-select-methods gnus-server-alist)
            nil t nil 'gnus-method-history)))
-      (cond ((assoc method gnus-valid-select-methods)
-            (list method
-                  (if (memq 'prompt-address
-                            (assoc method gnus-valid-select-methods))
-                      (read-string "Address: ")
-                    "")))
-           ((assoc method gnus-server-alist)
-            (list method))
-           (t
-            (list method ""))))))
+      (cond 
+       ((equal method "")
+       (setq method gnus-select-method))
+       ((assoc method gnus-valid-select-methods)
+       (list method
+             (if (memq 'prompt-address
+                       (assoc method gnus-valid-select-methods))
+                 (read-string "Address: ")
+               "")))
+       ((assoc method gnus-server-alist)
+       (list method))
+       (t
+       (list method ""))))))
 
-  (let* ((meth (and method (if address (list (intern method) address)
-                            method)))
+  (let* ((meth (when (and method
+                         (not (gnus-server-equal method gnus-select-method)))
+                (if address (list (intern method) address)
+                  method)))
         (nname (if method (gnus-group-prefixed-name name meth) name))
         backend info)
     (when (gnus-gethash nname gnus-newsrc-hashtb)
@@ -5748,9 +5758,13 @@ doing the deletion."
 
   ;; We find the proper prefixed name.
   (setq new-name
-       (gnus-group-prefixed-name
-        (gnus-group-real-name new-name)
-        (gnus-info-method (gnus-get-info group))))
+       (if (equal (gnus-group-real-name new-name) new-name)
+           ;; Native group.
+           new-name
+         ;; Foreign group.
+         (gnus-group-prefixed-name
+          (gnus-group-real-name new-name)
+          (gnus-info-method (gnus-get-info group)))))
 
   (gnus-message 6 "Renaming group %s to %s..." group new-name)
   (prog1
@@ -5959,7 +5973,7 @@ mail messages or news articles in files that have numeric names."
       (setq ext (format "<%d>" (setq i (1+ i)))))
     (gnus-group-make-group
      (gnus-group-real-name group)
-     (list 'nndir group (list 'nndir-directory dir)))))
+     (list 'nndir (gnus-group-real-name group) (list 'nndir-directory dir)))))
 
 (defun gnus-group-make-kiboze-group (group address scores)
   "Create an nnkiboze group.
@@ -9260,27 +9274,24 @@ The resulting hash table is returned, or nil if no Xrefs were found."
         (active (gnus-active group))
         range)
     ;; First peel off all illegal article numbers.
-    (if active
-       (let ((ids articles)
-             id first)
-         (while ids
-           (setq id (car ids))
-           (if (and first (> id (cdr active)))
-               (progn
-                 ;; We'll end up in this situation in one particular
-                 ;; obscure situation.  If you re-scan a group and get
-                 ;; a new article that is cross-posted to a different
-                 ;; group that has not been re-scanned, you might get
-                 ;; crossposted article that has a higher number than
-                 ;; Gnus believes possible.  So we re-activate this
-                 ;; group as well.  This might mean doing the
-                 ;; crossposting thingy will *increase* the number
-                 ;; of articles in some groups.  Tsk, tsk.
-                 (setq active (or (gnus-activate-group group) active))))
-           (if (or (> id (cdr active))
+    (when active
+      (let ((ids articles)
+           id first)
+       (while (setq id (pop ids))
+         (when (and first (> id (cdr active)))
+           ;; We'll end up in this situation in one particular
+           ;; obscure situation.  If you re-scan a group and get
+           ;; a new article that is cross-posted to a different
+           ;; group that has not been re-scanned, you might get
+           ;; crossposted article that has a higher number than
+           ;; Gnus believes possible.  So we re-activate this
+           ;; group as well.  This might mean doing the
+           ;; crossposting thingy will *increase* the number
+           ;; of articles in some groups.  Tsk, tsk.
+           (setq active (or (gnus-activate-group group) active)))
+         (when (or (> id (cdr active))
                    (< id (car active)))
-               (setq articles (delq id articles)))
-           (setq ids (cdr ids)))))
+           (setq articles (delq id articles))))))
     ;; If the read list is nil, we init it.
     (and active
         (null (gnus-info-read info))
@@ -13298,18 +13309,22 @@ save those articles instead."
                       gnus-article-save-directory
                       (car split-name))))
              (car (push result file-name-history)))))))
+    ;; Create the directory.
+    (unless (equal (directory-file-name file) file)
+      (make-directory (file-name-directory file) t))
     ;; If we have read a directory, we append the default file name.
     (when (file-directory-p file)
       (setq file (concat (file-name-as-directory file)
                         (file-name-nondirectory default-name))))
-    ;; Possibly translate some charaters.
+    ;; Possibly translate some characters.
     (nnheader-translate-file-chars file)))
 
 (defun gnus-article-archive-name (group)
   "Return the first instance of an \"Archive-name\" in the current buffer."
   (let ((case-fold-search t))
     (when (re-search-forward "archive-name: *\\([^ \n\t]+\\)[ \t]*$" nil t)
-      (match-string 1))))
+      (nnheader-concat gnus-article-save-directory
+                      (match-string 1)))))
 
 (defun gnus-summary-save-in-rmail (&optional filename)
   "Append this article to Rmail file.
index f615bba..6c4d930 100644 (file)
@@ -968,11 +968,8 @@ C-c C-r  message-ceasar-buffer-body (rot13 the message body)."
                      (file-exists-p message-signature-file))
                 signature))))
     (when signature
-;      ;; Remove blank lines at the end of the message.
-      (goto-char (point-max))
-;      (skip-chars-backward " \t\n")
-;      (delete-region (point) (point-max))
       ;; Insert the signature.
+      (goto-char (point-max))
       (unless (bolp)
        (insert "\n"))
       (insert "\n-- \n")
@@ -1055,7 +1052,11 @@ name, rather than giving an automatic name."
             (name (if enter-string
                       (read-string "New buffer name: " name-default)
                     name-default)))
-       (rename-buffer name t)))))
+       (rename-buffer name t)
+       (setq buffer-auto-save-file-name
+             (format "%s%s"
+                     (file-name-as-directory message-autosave-directory)
+                     (file-name-nondirectory buffer-auto-save-file-name)))))))
 
 (defun message-fill-yanked-message (&optional justifyp)
   "Fill the paragraphs of a message yanked into this one.
@@ -1684,8 +1685,8 @@ the user from the mailer."
          (concat "^" (regexp-quote mail-header-separator) "$"))
         (forward-line 1)
         (let ((b (point)))
-          (or (re-search-forward message-signature-separator nil t)
-              (goto-char (point-max)))
+          (goto-char (point-max))
+          (re-search-backward message-signature-separator nil t)
           (beginning-of-line)
           (or (re-search-backward "[^ \n\t]" b t)
               (y-or-n-p "Empty article.  Really post? ")))))
@@ -1715,7 +1716,7 @@ the user from the mailer."
     (message-check-element 'signature)
     (progn
       (goto-char (point-max))
-      (if (or (not (re-search-backward "^-- $" nil t))
+      (if (or (not (re-search-backward message-signature-separator nil t))
              (search-forward message-forward-end-separator nil t))
          t
        (if (> (count-lines (point) (point-max)) 5)
@@ -2983,7 +2984,7 @@ Do a `tab-to-tab-stop' if not in those headers."
 ;;; Help stuff.
 
 (defmacro message-y-or-n-p (question show &rest text)
-  "Ask QUESTION, displaying the rest of the arguments in a temporary buffer."
+  "Ask QUESTION, displaying the rest of the arguments in a temp. buffer if SHOW"
   `(message-talkative-question 'y-or-n-p ,question ,show ,@text))
 
 (defun message-talkative-question (ask question show &rest text)
index dd7fa8a..7e7222f 100644 (file)
@@ -63,6 +63,8 @@
            server))
   (unless (assq 'nndir-directory defs)
     (push `(nndir-directory ,server) defs))
+  ;(when (equal server "")
+  ;  (setq server (cadr (assq 'nndir-directory defs))))
   (push `(nndir-current-group
          ,(file-name-nondirectory (directory-file-name nndir-directory)))
        defs)
index fef8d63..11fcdd9 100644 (file)
@@ -440,11 +440,7 @@ parameter.  It should return nil, `warn' or `delete'.")
                (goto-char (point-min))
                (if (looking-at "movemail: ")
                    (delete-region (point-min) (match-end 0)))
-               (beep t)
-               (message (concat "movemail: "
-                                (buffer-substring (point-min)
-                                                  (point-max))))
-               (sit-for 3)
+               (error (concat "movemail: " (buffer-string)))
                (setq tofile nil))))))
       (and errors
           (buffer-name errors)
index 42be85d..bf5c94c 100644 (file)
@@ -351,6 +351,7 @@ instead use `nntp-server-buffer'.")
   "Open the virtual server SERVER.
 If CONNECTIONLESS is non-nil, don't attempt to connect to any physical
 servers."
+  (nnheader-init-server-buffer)
   ;; Called with just a port number as the defs.
   (when (or (stringp (car defs))
            (numberp (car defs)))
@@ -1058,7 +1059,7 @@ It will prompt for a password."
     ;; We open the nntp server if it is down.
     (or (nntp-server-opened (nnoo-current-server 'nntp))
        (nntp-open-server (nnoo-current-server 'nntp))
-       (error (nntp-status-message)))
+       (error "Couldn't open server: " (nntp-status-message)))
     ;; Send the strings.
     (process-send-string nntp-server-process cmd)
     t))
@@ -1193,10 +1194,11 @@ If SERVICE, use this as the port number."
    "nntpd" nntp-server-buffer server nntp-port-number))
 
 (defun nntp-open-rlogin (server)
+  "Open a connection to SERVER using rsh."
   (let ((proc (if nntp-rlogin-user-name
                  (start-process
                   "nntpd" nntp-server-buffer "rsh"
-                  "-l" nntp-rlogin-user-name server
+                  server "-l" nntp-rlogin-user-name
                   (mapconcat 'identity
                              nntp-rlogin-parameters " "))
                (start-process
index 39eccf0..c956e85 100644 (file)
@@ -49,7 +49,7 @@
     ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
     ("\\(:-*D\\)\\W" 1 "FaceGrinning.xpm")
     ("\\(:-*[)>}ยป]+\\)\\W" 1 "FaceHappy.xpm")
-    ("\\(:-*[/\\\"]\\)[^\\]" 1 "FaceIronic.xpm")
+    ("\\(:-*[/\\\"]\\)[^/]" 1 "FaceIronic.xpm")
     ("\\([8|]-*[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
     ("\\([:|]-*#+\\)\\W" 1 "FaceNyah.xpm")
     ("\\(:-*[({]+\\)\\W" 1 "FaceSad.xpm")
@@ -130,34 +130,36 @@ matches less aggresively is available.")
 ;;;###autoload
 (defun smiley-buffer (&optional buffer st nd)
   (interactive)
-  (save-excursion
-    (and buffer (set-buffer buffer))
-    (let ((buffer-read-only nil)
-         (alist smiley-regexp-alist)
-         entry regexp beg group file)
-      (goto-char (or st (point-min)))
-      (setq beg (point))
-      ;; loop through alist
-      (while (setq entry (pop alist))
-       (setq regexp (car entry)
-             group (cadr entry)
-             file (caddr entry))
-       (goto-char beg)
-       (while (re-search-forward regexp nd t)
-         (let* ((start (match-beginning group))
-                (end (match-end group))
-                (glyph (smiley-create-glyph (buffer-substring start end)
-                                            file)))
-           (when glyph
-             (mapcar 'delete-annotation (annotations-at end))
-             (let ((ext (make-extent start end)))
-               (set-extent-property ext 'invisible t)
-               (set-extent-property ext 'end-open t)
-               (set-extent-property ext 'intangible t))
-             (make-annotation glyph end 'text)
-             (when (smiley-end-paren-p start end)
-               (make-annotation ")" end 'text))
-             (goto-char end))))))))
+  (when (featurep 'x)
+    (save-excursion
+      (when buffer
+       (set-buffer buffer))
+      (let ((buffer-read-only nil)
+           (alist smiley-regexp-alist)
+           entry regexp beg group file)
+       (goto-char (or st (point-min)))
+       (setq beg (point))
+       ;; loop through alist
+       (while (setq entry (pop alist))
+         (setq regexp (car entry)
+               group (cadr entry)
+               file (caddr entry))
+         (goto-char beg)
+         (while (re-search-forward regexp nd t)
+           (let* ((start (match-beginning group))
+                  (end (match-end group))
+                  (glyph (smiley-create-glyph (buffer-substring start end)
+                                              file)))
+             (when glyph
+               (mapcar 'delete-annotation (annotations-at end))
+               (let ((ext (make-extent start end)))
+                 (set-extent-property ext 'invisible t)
+                 (set-extent-property ext 'end-open t)
+                 (set-extent-property ext 'intangible t))
+               (make-annotation glyph end 'text)
+               (when (smiley-end-paren-p start end)
+                 (make-annotation ")" end 'text))
+               (goto-char end)))))))))
 
 (defun smiley-end-paren-p (start end)
   "Try to guess whether the current smiley is an end-paren smiley."
index e6a0108..6e5c837 100644 (file)
@@ -541,7 +541,13 @@ Subscribe all new groups alphabetically.
 
 @item gnus-subscribe-hierarchically
 @vindex gnus-subscribe-hierarchically
-Subscribe all new groups hierarchically.
+Subscribe all new groups hierarchically.  The difference between this
+function and @code{gnus-subscribe-alphabetically} is slight.
+{gnus-subscribe-alphabetically} will subscribe new groups in a strictly
+alphabetical fashion, while this function will enter groups into it's
+hierarchy.  So if you want to have the @samp{rec} hierarchy before the
+@samp{comp} hierarchy, this function will not mess that configuration
+up.  Or something like that.
 
 @item gnus-subscribe-interactively
 @vindex gnus-subscribe-interactively
@@ -1495,9 +1501,9 @@ to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}.
 @kindex G r (Group)
 @findex gnus-group-rename-group
 Rename the current group to something else
-(@code{gnus-group-rename-group}).  This is legal only on some groups --
-mail groups mostly.  This command might very well be quite slow on some
-backends. 
+(@code{gnus-group-rename-group}).  This is legal only on some
+groups---mail groups mostly.  This command might very well be quite slow
+on some backends.
 
 @item G e
 @kindex G e (Group)
@@ -1536,7 +1542,7 @@ Make the Gnus help group (@code{gnus-group-make-help-group}).
 Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
 default a group pointing to the most recent articles will be created
 (@code{gnus-group-recent-archive-directory}), but given a prefix, a full
-group will be created from from @code{gnus-group-archive-directory}.
+group will be created from @code{gnus-group-archive-directory}.
 
 @item G k
 @kindex G k (Group)
@@ -2785,7 +2791,9 @@ command will go to the next group without confirmation.  Also
 @item gnus-auto-select-same
 @vindex gnus-auto-select-same
 If non-@code{nil}, all the movement commands will try to go to the next
-article with the same subject as the current.  This variable is not
+article with the same subject as the current.  (@dfn{Same} here might
+mean @dfn{roughly equal}.  See @code{gnus-summary-gather-subject-limit}
+for details (@pxref{Customizing Threading}).)  This variable is not
 particularly useful if you use a threaded display.
 
 @item gnus-summary-check-current
@@ -5208,19 +5216,19 @@ Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
 @vindex gnus-article-x-face-too-ugly
 Look for and display any X-Face headers
 (@code{gnus-article-display-x-face}).  The command executed by this
-function is given by the @code{gnus-article-x-face-command} variable.  If
-this variable is a string, this string will be executed in a sub-shell.
-If it is a function, this function will be called with the face as the
-argument.  If the @code{gnus-article-x-face-too-ugly} (which is a regexp)
-matches the @code{From} header, the face will not be shown.  The default
-action under Emacs is to fork off an @code{xv} to view the face; under
-XEmacs the default action is to display the face before the @code{From}
-header.  (It's nicer if XEmacs has been compiled with X-Face support --
-that will make display somewhat faster.  If there's no native X-Face
-support, Gnus will try to convert the @code{X-Face} header using
+function is given by the @code{gnus-article-x-face-command} variable.
+If this variable is a string, this string will be executed in a
+sub-shell.  If it is a function, this function will be called with the
+face as the argument.  If the @code{gnus-article-x-face-too-ugly} (which
+is a regexp) matches the @code{From} header, the face will not be shown.
+The default action under Emacs is to fork off an @code{xv} to view the
+face; under XEmacs the default action is to display the face before the
+@code{From} header.  (It's nicer if XEmacs has been compiled with X-Face
+support---that will make display somewhat faster.  If there's no native
+X-Face support, Gnus will try to convert the @code{X-Face} header using
 external programs from the @code{pbmplus} package and friends.)  If you
 want to have this function in the display hook, it should probably come
-last. 
+last.
 
 @item W b
 @kindex W b (Summary)
@@ -6605,8 +6613,8 @@ archive group will appear in the group buffer the next time you start
 Gnus, or the next time you press @kbd{F} in the group buffer.  You can
 enter it and read the articles in it just like you'd read any other
 group.  If the group gets really big and annoying, you can simply rename
-if (using @kbd{G r} in the group buffer) to something nice --
-@samp{misc-mail-september-1995}, or whatever.  New messages will
+if (using @kbd{G r} in the group buffer) to something
+nice---@samp{misc-mail-september-1995}, or whatever.  New messages will
 continue to be stored in the old (now empty) group.
 
 That's the default method of archiving sent mail.  Gnus also offers two
@@ -7122,8 +7130,8 @@ Remove all marks to whether Gnus was denied connection from all servers
 @cindex news backends
 
 A newsreader is normally used for reading news.  Gnus currently provides
-only two methods of getting news -- it can read from an @sc{nntp}
-server, or it can read from a local spool.
+only two methods of getting news---it can read from an @sc{nntp} server,
+or it can read from a local spool.
 
 @menu
 * NNTP::               Reading news from an @sc{nntp} server.
@@ -9402,7 +9410,7 @@ interesting (with @kbd{I T} or @kbd{I S}), and ignore (@kbd{C y}) the
 rest.  Next time you enter the group, you will see new articles in the
 interesting threads, plus any new threads.
 
-I.e. -- the orphan score atom is for high-volume groups where there
+I.e.---the orphan score atom is for high-volume groups where there
 exist a few interesting threads which can't be found automatically by
 ordinary scoring rules.
 
@@ -10410,7 +10418,7 @@ you want to change the @code{article} setting, you could say:
 @end lisp
 
 You'd typically stick these @code{gnus-add-configuration} calls in your
-@file{.gnus} file or in some startup hook -- they should be run after
+@file{.gnus} file or in some startup hook---they should be run after
 Gnus has been loaded.
 
 
@@ -10821,7 +10829,7 @@ over your shoulder as you read news.
 @menu
 * Picon Basics::           What are picons and How do I get them.
 * Picon Requirements::     Don't go further if you aren't using XEmacs.
-* Easy Picons::            Displaying Picons -- the easy way.
+* Easy Picons::            Displaying Picons---the easy way.
 * Hard Picons::            The way you should do it.  You'll learn something.
 * Picon Configuration::    Other variables you can trash/tweak/munge/play with.
 @end menu
@@ -10898,8 +10906,8 @@ Where the picon images should be displayed.  It is @code{picons} by
 default (which by default maps to the buffer @samp{*Picons*}).  Other
 valid places could be @code{article}, @code{summary}, or
 @samp{"*scratch*"} for all I care.  Just make sure that you've made the
-buffer visible using the standard Gnus window configuration routines --
-@xref{Windows Configuration}.
+buffer visible using the standard Gnus window configuration
+routines---@xref{Windows Configuration}.
 
 @end table
 
@@ -12682,9 +12690,9 @@ basically, with each header (ouch) having one slot.
 
 These slots are, in order: @code{number}, @code{subject}, @code{from},
 @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines},
-@code{xref}.  There are macros for accessing and setting these slots --
-they all have predictable names beginning with @code{mail-header-} and
-@code{mail-header-set-}, respectively.  
+@code{xref}.  There are macros for accessing and setting these
+slots---they all have predictable names beginning with
+@code{mail-header-} and @code{mail-header-set-}, respectively.
 
 The @code{xref} slot is really a @code{misc} slot.  Any extra info will
 be put in there.
@@ -12847,7 +12855,7 @@ following function:
 @end lisp
 
 This sort of thing has been done for bunches of functions.  Gnus does
-not redefine any native Emacs functions while running under XEmacs -- it
+not redefine any native Emacs functions while running under XEmacs---it
 does this @code{defalias} thing with Gnus equivalents instead.  Cleaner
 all over.