Sync up with Pteruductyl Gnus v0.71
[elisp/gnus.git-] / lisp / gnus-start.el
index 5b9d98a..dc2f3ed 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-start.el --- startup functions for Gnus
-;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -386,7 +386,7 @@ Can be used to turn version control on or off."
   :group 'gnus-newsrc
   :type 'boolean)
 
-(defvar gnus-startup-file-coding-system 'binary
+(defvar gnus-startup-file-coding-system 'ctext
   "*Coding system for startup file.")
 
 ;;; Internal variables
@@ -427,9 +427,7 @@ Can be used to turn version control on or off."
                   (file-exists-p (concat file ".el"))
                   (file-exists-p (concat file ".elc")))
               (condition-case var
-                  (let ((coding-system-for-read
-                         gnus-startup-file-coding-system))
-                    (load file nil t))
+                  (load file nil t)
                 (error
                  (error "Error in %s: %s" file var)))))))))
 
@@ -713,6 +711,8 @@ prompt the user for the name of an NNTP server to use."
          (gnus-group-first-unread-group)
          (gnus-configure-windows 'group)
          (gnus-group-set-mode-line)
+         ;; For reading Info.
+         (set-language-info "Japanese" 'gnus-info "gnus-ja")
          (gnus-run-hooks 'gnus-started-hook))))))
 
 (defun gnus-start-draft-setup ()
@@ -721,6 +721,7 @@ prompt the user for the name of an NNTP server to use."
   (unless (gnus-gethash "nndraft:drafts" gnus-newsrc-hashtb)
     (let ((gnus-level-default-subscribed 1))
       (gnus-subscribe-group "nndraft:drafts" nil '(nndraft "")))
+    (gnus-group-set-parameter "nndraft:drafts" 'charset nil)
     (gnus-group-set-parameter
      "nndraft:drafts" 'gnus-dummy '((gnus-draft-mode)))))
 
@@ -1103,11 +1104,16 @@ for new groups, and subscribe the new groups as zombies."
     got-new))
 
 (defun gnus-check-first-time-used ()
-  (if (or (> (length gnus-newsrc-alist) 1)
-         (file-exists-p gnus-startup-file)
-         (file-exists-p (concat gnus-startup-file ".el"))
-         (file-exists-p (concat gnus-startup-file ".eld")))
-      nil
+  (catch 'ended
+    (let ((files (list gnus-current-startup-file
+                      (concat gnus-current-startup-file ".el")
+                      (concat gnus-current-startup-file ".eld")
+                      gnus-startup-file
+                      (concat gnus-startup-file ".el")
+                      (concat gnus-startup-file ".eld"))))
+      (while files
+       (when (file-exists-p (pop files))
+         (throw 'ended nil))))
     (gnus-message 6 "First time user; subscribing you to default groups")
     (unless (gnus-read-active-file-p)
       (let ((gnus-read-active-file t))
@@ -1243,14 +1249,14 @@ for new groups, and subscribe the new groups as zombies."
            (setq active (gnus-active group))
            (setq num
                  (if active (- (1+ (cdr active)) (car active)) t))
-           ;; Check whether the group is foreign.  If so, the
-           ;; foreign select method has to be entered into the
-           ;; info.
-           (let ((method (or gnus-override-subscribe-method
-                             (gnus-group-method group))))
-             (if (eq method gnus-select-method)
-                 (setq info (list group level nil))
-               (setq info (list group level nil nil method)))))
+           ;; Shorten the select method if possible, if we need to
+           ;; store it at all (native groups).
+           (let ((method (gnus-method-simplify 
+                          (or gnus-override-subscribe-method
+                              (gnus-group-method group)))))
+             (if method
+                 (setq info (list group level nil nil method))
+               (setq info (list group level nil)))))
          (unless previous
            (setq previous
                  (let ((p gnus-newsrc-alist))
@@ -1705,13 +1711,6 @@ newsgroup."
                (gnus-message 5 "%sdone" mesg))))))
        (setq methods (cdr methods))))))
 
-
-(defun gnus-ignored-newsgroups-has-to-p ()
-  "Non-nil iff gnus-ignored-newsgroups includes \"^to\\\\.\" as an element."
-  ;; note this regexp is the same as:
-  ;; (concat (regexp-quote "^to\\.") "\\($\\|" (regexp-quote "\\|") "\\)")
-  (string-match "\\^to\\\\\\.\\($\\|\\\\|\\)" gnus-ignored-newsgroups))
-
 ;; Read an active file and place the results in `gnus-active-hashtb'.
 (defun gnus-active-to-gnus-format (&optional method hashtb ignore-errors
                                             real-active)
@@ -1729,13 +1728,11 @@ newsgroup."
                              (gnus-make-hashtable 4096)))))))
     ;; Delete unnecessary lines.
     (goto-char (point-min))
-    (cond ((gnus-ignored-newsgroups-has-to-p)
-          (delete-matching-lines gnus-ignored-newsgroups))
-         ((string= gnus-ignored-newsgroups "")
-          (delete-matching-lines "^to\\."))
-         (t
-          (delete-matching-lines (concat "^to\\.\\|"
-                                         gnus-ignored-newsgroups))))
+    (cond
+     ((string= gnus-ignored-newsgroups "")
+      (delete-matching-lines "^to\\."))
+     (t
+      (delete-matching-lines (concat "^to\\.\\|" gnus-ignored-newsgroups))))
 
     ;; Make the group names readable as a lisp expression even if they
     ;; contain special characters.
@@ -1772,13 +1769,13 @@ newsgroup."
                       (progn
                         (skip-chars-forward " \t")
                         (not
-                         (or (= (following-char) ?=)
-                             (= (following-char) ?x)
-                             (= (following-char) ?j)))))
+                         (or (eq (char-after) ?=)
+                             (eq (char-after) ?x)
+                             (eq (char-after) ?j)))))
                  (progn
                    (set group (cons min max))
                    ;; if group is moderated, stick in moderation table
-                   (when (= (following-char) ?m)
+                   (when (eq (char-after) ?m)
                      (unless gnus-moderated-hashtb
                        (setq gnus-moderated-hashtb (gnus-make-hashtable)))
                      (gnus-sethash (symbol-name group) t
@@ -1836,7 +1833,7 @@ newsgroup."
       (let (min max group)
        (while (not (eobp))
          (condition-case ()
-             (when (= (following-char) ?2)
+             (when (eq (char-after) ?2)
                (read cur) (read cur)
                (setq min (read cur)
                      max (read cur))
@@ -1916,16 +1913,19 @@ If FORCE is non-nil, the .newsrc file is read."
     ;; We always, always read the .eld file.
     (gnus-message 5 "Reading %s..." ding-file)
     (let (gnus-newsrc-assoc)
-      (condition-case nil
-         (let ((coding-system-for-read gnus-startup-file-coding-system))
-           (load ding-file t t t))
-       (error
-        (ding)
-        (unless (gnus-yes-or-no-p
-                 (format "Error in %s; continue? " ding-file))
-          (error "Error in %s" ding-file))))
-      (when gnus-newsrc-assoc
-       (setq gnus-newsrc-alist gnus-newsrc-assoc)))
+      (when (file-exists-p ding-file)
+       (condition-case nil
+           (with-temp-buffer
+             (insert-file-contents-as-coding-system
+              gnus-startup-file-coding-system ding-file)
+             (eval-region (point-min) (point-max)))
+         (error
+          (ding)
+          (unless (gnus-yes-or-no-p
+                   (format "Error in %s; continue? " ding-file))
+            (error "Error in %s" ding-file))))
+       (when gnus-newsrc-assoc
+         (setq gnus-newsrc-alist gnus-newsrc-assoc))))
     (gnus-make-hashtable-from-newsrc-alist)
     (when (file-newer-than-file-p file ding-file)
       ;; Old format quick file
@@ -2053,7 +2053,7 @@ If FORCE is non-nil, the .newsrc file is read."
        (unless (boundp symbol)
          (set symbol nil))
        ;; It was a group name.
-       (setq subscribed (= (following-char) ?:)
+       (setq subscribed (eq (char-after) ?:)
              group (symbol-name symbol)
              reads nil)
        (if (eolp)
@@ -2077,7 +2077,7 @@ If FORCE is non-nil, the .newsrc file is read."
                           (read buf)))
              (widen)
              ;; If the next character is a dash, then this is a range.
-             (if (= (following-char) ?-)
+             (if (eq (char-after) ?-)
                  (progn
                    ;; We read the upper bound of the range.
                    (forward-char 1)
@@ -2099,8 +2099,8 @@ If FORCE is non-nil, the .newsrc file is read."
                (push num1 reads))
              ;; If the next char in ?\n, then we have reached the end
              ;; of the line and return nil.
-             (/= (following-char) ?\n))
-            ((= (following-char) ?\n)
+             (not (eq (char-after) ?\n)))
+            ((eq (char-after) ?\n)
              ;; End of line, so we end.
              nil)
             (t
@@ -2226,7 +2226,7 @@ If FORCE is non-nil, the .newsrc file is read."
                  (gnus-point-at-eol)))
        ;; Search for all "words"...
        (while (re-search-forward "[^ \t,\n]+" eol t)
-         (if (= (char-after (match-beginning 0)) ?!)
+         (if (eq (char-after (match-beginning 0)) ?!)
              ;; If the word begins with a bang (!), this is a "not"
              ;; spec.  We put this spec (minus the bang) and the
              ;; symbol `ignore' into the list.
@@ -2279,8 +2279,10 @@ If FORCE is non-nil, the .newsrc file is read."
          (gnus-message 5 "Saving %s.eld..." gnus-current-startup-file)
          (gnus-gnus-to-quick-newsrc-format)
          (gnus-run-hooks 'gnus-save-quick-newsrc-hook)
-         (let ((coding-system-for-write gnus-startup-file-coding-system))
-           (save-buffer))
+         (write-region-as-coding-system
+          gnus-startup-file-coding-system
+          (point-min) (point-max) (buffer-file-name))
+         (set-buffer-modified-p nil)
          (kill-buffer (current-buffer))
          (gnus-message
           5 "Saving %s.eld...done" gnus-current-startup-file))
@@ -2530,7 +2532,7 @@ If FORCE is non-nil, the .newsrc file is read."
                          (fboundp 'gnus-mule-get-coding-system)
                          (gnus-mule-get-coding-system (symbol-name group)))))
                (when coding
-                 (setq str (mm-decode-coding-string str (car coding))))
+                 (setq str (decode-coding-string str (car coding))))
                (set group str)))
            (forward-line 1))))
       (gnus-message 5 "Reading descriptions file...done")