From: yamaoka Date: Sun, 26 Dec 2004 13:48:19 +0000 (+0000) Subject: Synch to No Gnus 200412261345. X-Git-Tag: t-gnus-6_17_4-quimby-~616 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=91c667795b31d727a741088a198b806e963c43fc;p=elisp%2Fgnus.git- Synch to No Gnus 200412261345. --- diff --git a/ChangeLog b/ChangeLog index def1b28..45ca335 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,53 @@ +2004-12-26 Katsumi Yamaoka + + * GNUS-NEWS: Generated. + +2004-12-26 Katsumi Yamaoka + + * lisp/nnrss.el: Require nnheader instead of mm-util, mime-parse + instead of rfc2231; require eword-encode, mime-edit and mime-view; + reload nnheader when compiling to override mm-util macros. + (nnrss-file-coding-system): New variable. + (nnrss-format-string): Redefine it as an inline function. + (nnrss-decode-group-name): New function. + (nnrss-string-as-multibyte): Remove. + (nnrss-retrieve-headers): Decode group name; don't use + nnrss-format-string. + (nnrss-request-group): Decode group name. + (nnrss-body-presentation-method): New function. + (nnrss-request-article): Decode group name; allow a Message-ID as + well as an article number; encode group name; don't use + nnrss-format-string; replace whitespace with _ in Message-ID; use + nnrss-body-presentation-method and mime-edit-translate-body to + compose a MIME article. + (nnrss-request-expire-articles): Decode group name. + (nnrss-request-delete-group): Decode group name. + (nnrss-fetch): Clarify error message. + (nnrss-read-server-data): Use insert-file-contents instead of load; + bind file-name-coding-system; use multibyte buffer. + (nnrss-save-server-data): Bind coding-system-for-write to the + value of nnrss-file-coding-system; bind file-name-coding-system; + add coding cookie. + (nnrss-read-group-data): Use insert-file-contents instead of load; + bind file-name-coding-system; use multibyte buffer. + (nnrss-save-group-data): Bind coding-system-for-write to the + value of nnrss-file-coding-system; bind file-name-coding-system. + (nnrss-decode-entities-string): Rename from n-d-e-unibyte-string; + make it work with non-ASCII text. + (nnrss-snarf-moreover-categories): Use mime-decode-parameters + instead of rfc2231-decode-encoded-string. + (nnrss-find-el): Make it work with old xml.el as well. + +2004-12-26 Tsuyoshi AKIHO + + * lisp/nnrss.el (nnrss-get-encoding): New function. + (nnrss-fetch): Use unibyte buffer initially; bind + coding-system-for-read while performing mm-url-insert; remove ^Ms; + decode contents according to the encoding attribute. + (nnrss-save-group-data): Add coding cookie. + (nnrss-mime-encode-string): New function. + (nnrss-check-group): Use it to encode subject and author. + 2004-12-23 Katsumi Yamaoka * texi/infohack.el (infohack-texi-format): Revert. diff --git a/GNUS-NEWS b/GNUS-NEWS index b7d2657..8cd25d2 100644 --- a/GNUS-NEWS +++ b/GNUS-NEWS @@ -91,6 +91,9 @@ message-generate-hashcash t) to enable. ** Gnus supports a new sort command in the Summary buffer: `C-c C-s C-t' (`gnus-summary-sort-by-recipient'). +** The `nnrss' back end now supports multilingual text. Non-ASCII group +names for the `nnrss' groups are also supported. *Note RSS::. + * For older news, see Gnus info node "New Features". diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 55547f5..b9aa137 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,43 @@ +2004-12-26 Katsumi Yamaoka + + * nnrss.el: Require rfc2047 and mml. + (nnrss-file-coding-system): New variable. + (nnrss-format-string): Redefine it as an inline function. + (nnrss-decode-group-name): New function. + (nnrss-string-as-multibyte): Remove. + (nnrss-retrieve-headers): Decode group name; don't use + nnrss-format-string. + (nnrss-request-group): Decode group name. + (nnrss-request-article): Decode group name; allow a Message-ID as + well as an article number; don't use nnrss-format-string; encode a + Message-ID string which may contain non-ASCII characters; use + mml-to-mime to compose a MIME article. + (nnrss-request-expire-articles): Decode group name. + (nnrss-request-delete-group): Decode group name. + (nnrss-fetch): Clarify error message. + (nnrss-read-server-data): Use insert-file-contents instead of load; + bind file-name-coding-system; use multibyte buffer. + (nnrss-save-server-data): Bind coding-system-for-write to the + value of nnrss-file-coding-system; bind file-name-coding-system; + add coding cookie. + (nnrss-read-group-data): Use insert-file-contents instead of load; + bind file-name-coding-system; use multibyte buffer. + (nnrss-save-group-data): Bind coding-system-for-write to the + value of nnrss-file-coding-system; bind file-name-coding-system. + (nnrss-decode-entities-string): Rename from n-d-e-unibyte-string; + make it work with non-ASCII text. + (nnrss-find-el): Make it work with old xml.el as well. + +2004-12-26 Tsuyoshi AKIHO + + * nnrss.el (nnrss-get-encoding): New function. + (nnrss-fetch): Use unibyte buffer initially; bind + coding-system-for-read while performing mm-url-insert; remove ^Ms; + decode contents according to the encoding attribute. + (nnrss-save-group-data): Add coding cookie. + (nnrss-mime-encode-string): New function. + (nnrss-check-group): Use it to encode subject and author. + 2004-12-23 Teodor Zlatanov * spam.el (spam-check-BBDB): don't get the symbol-value of an diff --git a/lisp/nnrss.el b/lisp/nnrss.el index 43bfcf0..171126b 100644 --- a/lisp/nnrss.el +++ b/lisp/nnrss.el @@ -31,16 +31,24 @@ (require 'nnoo) (require 'nnmail) (require 'message) -(require 'mm-util) +(require 'nnheader) (require 'gnus-util) (require 'time-date) -(require 'rfc2231) +(require 'mime-parse) (require 'mm-url) +(require 'eword-encode) +(require 'mime-edit) +(require 'mime-view) (eval-when-compile (ignore-errors (require 'xml))) (eval '(require 'xml)) +;; Reload mm-util emulating macros for compiling. +(eval-when-compile + (let ((features (delq 'mm-util (copy-sequence features)))) + (load "nnheader" nil t))) + (nnoo-declare nnrss) (defvoo nnrss-directory (nnheader-concat gnus-directory "rss/") @@ -78,17 +86,23 @@ The arguments are (ENTRY GROUP ARTICLE). ENTRY is the record of the current headline. GROUP is the group name. ARTICLE is the article number of the current headline.") +(defvar nnrss-file-coding-system nnheader-auto-save-coding-system + "Coding system used when reading and writing files.") + (nnoo-define-basics nnrss) ;;; Interface functions -(eval-when-compile - (defmacro nnrss-string-as-multibyte (string) - (if (featurep 'xemacs) - string - `(string-as-multibyte ,string)))) +(defsubst nnrss-format-string (string) + (gnus-replace-in-string string " *\n *" " ")) + +(defun nnrss-decode-group-name (group) + (if (and group (mm-coding-system-p 'utf-8)) + (setq group (mm-decode-coding-string group 'utf-8)) + group)) (deffoo nnrss-retrieve-headers (articles &optional group server fetch-old) + (setq group (nnrss-decode-group-name group)) (nnrss-possibly-change-group group server) (let (e) (save-excursion @@ -97,21 +111,26 @@ ARTICLE is the article number of the current headline.") (dolist (article articles) (if (setq e (assq article nnrss-group-data)) (insert (number-to-string (car e)) "\t" ;; number - (if (nth 3 e) - (nnrss-format-string (nth 3 e)) "") - "\t" ;; subject - (if (nth 4 e) - (nnrss-format-string (nth 4 e)) - "(nobody)") - "\t" ;;from + ;; subject + (or (nth 3 e) "") + "\t" + ;; from + (or (nth 4 e) "(nobody)") + "\t" + ;; date (or (nth 5 e) "") - "\t" ;; date + "\t" + ;; id (format "<%d@%s.nnrss>" (car e) group) - "\t" ;; id - "\t" ;; refs - "-1" "\t" ;; chars - "-1" "\t" ;; lines - "" "\t" ;; Xref + "\t" + ;; refs + "\t" + ;; chars + "-1" "\t" + ;; lines + "-1" "\t" + ;; Xref + "" "\t" (if (and (nth 6 e) (memq nnrss-description-field nnmail-extra-headers)) @@ -132,6 +151,7 @@ ARTICLE is the article number of the current headline.") 'nov) (deffoo nnrss-request-group (group &optional server dont-check) + (setq group (nnrss-decode-group-name group)) (nnrss-possibly-change-group group server) (if dont-check t @@ -145,54 +165,81 @@ ARTICLE is the article number of the current headline.") (deffoo nnrss-close-group (group &optional server) t) +(defun nnrss-body-presentation-method () + "Return a body presentation method used with MIME-View. +The return value will be `html' or `text'." + (in-calist-package 'mime-view) + (let ((default (cdr (assq 'body-presentation-method + (car (ctree-find-calist + mime-preview-condition + '((type . text) (subtype . t))))))) + (html (cdr (assq 'body-presentation-method + (car (ctree-find-calist + mime-preview-condition + '((type . text) (subtype . html)))))))) + (if (or (not default) + (not html) + (eq default html)) + 'text + 'html))) + (deffoo nnrss-request-article (article &optional group server buffer) + (setq group (nnrss-decode-group-name group)) + (when (stringp article) + (setq article (if (string-match "\\`<\\([0-9]+\\)@" article) + (string-to-number (match-string 1 article)) + 0))) (nnrss-possibly-change-group group server) (let ((e (assq article nnrss-group-data)) - (boundary "=-=-=-=-=-=-=-=-=-") (nntp-server-buffer (or buffer nntp-server-buffer)) post err) (when e (catch 'error (with-current-buffer nntp-server-buffer (erase-buffer) - (goto-char (point-min)) - (insert "Mime-Version: 1.0\nContent-Type: multipart/alternative; boundary=\"" boundary "\"\n") (if group - (insert "Newsgroups: " group "\n")) + (mm-with-unibyte-current-buffer + (insert "Newsgroups: " + (if (mm-coding-system-p 'utf-8) + (mm-encode-coding-string group 'utf-8) + group) + "\n"))) (if (nth 3 e) - (insert "Subject: " (nnrss-format-string (nth 3 e)) "\n")) + (insert "Subject: " (nth 3 e) "\n")) (if (nth 4 e) - (insert "From: " (nnrss-format-string (nth 4 e)) "\n")) + (insert "From: " (nth 4 e) "\n")) (if (nth 5 e) (insert "Date: " (nnrss-format-string (nth 5 e)) "\n")) - (insert "Message-ID: " (format "<%d@%s.nnrss>" (car e) group) "\n") + (insert (format "Message-ID: <%d@%s.nnrss>\n" + (car e) + (gnus-replace-in-string group "[\t\n ]+" "_"))) (insert "\n") (let ((text (if (nth 6 e) - (nnrss-string-as-multibyte (nth 6 e)))) - (link (if (nth 2 e) - (nth 2 e)))) - (insert "\n\n--" boundary "\nContent-Type: text/plain\n\n") - (let ((point (point))) - (when text - (insert text) - (goto-char point) - (while (search-forward "\n" nil t) - (replace-match " ")) - (goto-char (point-max)) - (insert "\n\n")) - (when link - (insert link))) - (insert "\n\n--" boundary "\nContent-Type: text/html\n\n") - (let ((point (point))) - (when text - (insert "\n" text "\n") - (goto-char point) - (while (search-forward "\n" nil t) - (replace-match " ")) - (goto-char (point-max)) - (insert "\n\n")) - (when link - (insert "

link

\n")))) + (mapconcat 'identity + (delete "" (split-string (nth 6 e) "\n+")) + " "))) + (link (nth 2 e)) + (mail-header-separator "") + mime-edit-insert-user-agent-field) + (when (or text link) + (if (eq 'html (nnrss-body-presentation-method)) + (progn + (mime-edit-insert-text "html") + (insert "\n") + (when text + (insert text "\n")) + (when link + (insert "

link

\n")) + (insert "\n")) + (mime-edit-insert-text "plain") + (if text + (progn + (insert text "\n") + (when link + (insert "\n" link "\n"))) + (when link + (insert link "\n")))) + (mime-edit-translate-body))) (when nnrss-content-function (funcall nnrss-content-function e group article))))) (cond @@ -217,6 +264,7 @@ ARTICLE is the article number of the current headline.") (deffoo nnrss-request-expire-articles (articles group &optional server force) + (setq group (nnrss-decode-group-name group)) (nnrss-possibly-change-group group server) (let (e days not-expirable changed) (dolist (art articles) @@ -234,6 +282,7 @@ ARTICLE is the article number of the current headline.") not-expirable)) (deffoo nnrss-request-delete-group (group &optional force server) + (setq group (nnrss-decode-group-name group)) (nnrss-possibly-change-group group server) (setq nnrss-server-data (delq (assoc group nnrss-server-data) nnrss-server-data)) @@ -256,16 +305,41 @@ ARTICLE is the article number of the current headline.") ;;; Internal functions (eval-when-compile (defun xml-rpc-method-call (&rest args))) + +(defun nnrss-get-encoding () + "Return an encoding attribute specified in the current xml contents." + (goto-char (point-min)) + (mm-coding-system-p + (if (re-search-forward + "<\\?[^>]*encoding=\\(?:\"\\([^>]+\\)\"\\|'\\([^>]+\\)'\\)" + nil t) + (intern-soft (downcase (or (match-string-no-properties 1) + (match-string-no-properties 2)))) + ;; The default encoding for xml. + 'utf-8))) + (defun nnrss-fetch (url &optional local) "Fetch URL and put it in a the expected Lisp structure." - (with-temp-buffer + (mm-with-unibyte-buffer ;;some CVS versions of url.el need this to close the connection quickly - (let (xmlform htmlform) + (let (cs xmlform htmlform) ;; bit o' work necessary for w3 pre-cvs and post-cvs (if local (let ((coding-system-for-read 'binary)) (insert-file-contents url)) - (mm-url-insert url)) + (let (;; FIXME: shouldn't binding `coding-system-for-read' be + ;; moved to `mm-url-insert'? + (coding-system-for-read 'binary) + ;; mm-url will load mm-util. d-e-m-c should be bound to + ;; t then, because of `mm-emacs-mule'. + (default-enable-multibyte-characters t)) + (mm-url-insert url))) + (nnheader-remove-cr-followed-by-lf) + ;; Decode text according to the encoding attribute. + (when (setq cs (nnrss-get-encoding)) + (mm-decode-coding-region (point-min) (point-max) cs) + (mm-enable-multibyte)) + (goto-char (point-min)) ;; Because xml-parse-region can't deal with anything that isn't ;; xml and w3-parse-buffer can't deal with some xml, we have to @@ -274,15 +348,16 @@ ARTICLE is the article number of the current headline.") ;; why w3-parse-buffer fails to parse some well-formed xml and ;; fix it. - (condition-case nil + (condition-case err1 (setq xmlform (xml-parse-region (point-min) (point-max))) (error - (condition-case err + (condition-case err2 (setq htmlform (caddar (w3-parse-buffer (current-buffer)))) (error - (message "nnrss: %s: Not valid XML and w3-parse doesn't work: %s" - url err))))) + (message "\ +nnrss: %s: Not valid XML %s and w3-parse doesn't work %s" + url err1 err2))))) (if htmlform htmlform xmlform)))) @@ -315,13 +390,21 @@ ARTICLE is the article number of the current headline.") (setq nnrss-server-data nil) (let ((file (nnrss-make-filename "nnrss" server))) (when (file-exists-p file) - (let ((coding-system-for-read 'binary)) - (load file nil nil t))))) + ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII + ;; file names. So, we use `insert-file-contents' instead. + (mm-with-multibyte-buffer + (let ((coding-system-for-read nnrss-file-coding-system) + (file-name-coding-system nnmail-pathname-coding-system)) + (insert-file-contents file) + (eval-region (point-min) (point-max))))))) (defun nnrss-save-server-data (server) (gnus-make-directory nnrss-directory) - (let ((coding-system-for-write 'binary)) + (let ((coding-system-for-write nnrss-file-coding-system) + (file-name-coding-system nnmail-pathname-coding-system)) (with-temp-file (nnrss-make-filename "nnrss" server) + (insert (format ";; -*- coding: %s; -*-\n" + nnrss-file-coding-system)) (gnus-prin1 `(setq nnrss-group-alist ',nnrss-group-alist)) (gnus-prin1 `(setq nnrss-server-data ',nnrss-server-data))))) @@ -335,8 +418,13 @@ ARTICLE is the article number of the current headline.") (setq nnrss-group-min (+ nnrss-group-max 1))) (let ((file (nnrss-make-filename group server))) (when (file-exists-p file) - (let ((coding-system-for-read 'binary)) - (load file nil t t)) + ;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII + ;; file names. So, we use `insert-file-contents' instead. + (mm-with-multibyte-buffer + (let ((coding-system-for-read nnrss-file-coding-system) + (file-name-coding-system nnmail-pathname-coding-system)) + (insert-file-contents file) + (eval-region (point-min) (point-max)))) (dolist (e nnrss-group-data) (puthash (or (nth 2 e) (nth 6 e)) t nnrss-group-hashtb) (when (and (car e) (> nnrss-group-min (car e))) @@ -346,8 +434,11 @@ ARTICLE is the article number of the current headline.") (defun nnrss-save-group-data (group server) (gnus-make-directory nnrss-directory) - (let ((coding-system-for-write 'binary)) + (let ((coding-system-for-write nnrss-file-coding-system) + (file-name-coding-system nnmail-pathname-coding-system)) (with-temp-file (nnrss-make-filename group server) + (insert (format ";; -*- coding: %s; -*-\n" + nnrss-file-coding-system)) (gnus-prin1 `(setq nnrss-group-data ',nnrss-group-data))))) (defun nnrss-make-filename (name server) @@ -379,15 +470,30 @@ ARTICLE is the article number of the current headline.") (mm-with-unibyte-current-buffer (mm-url-insert url))) -(defun nnrss-decode-entities-unibyte-string (string) +(defun nnrss-decode-entities-string (string) (if string - (mm-with-unibyte-buffer + (mm-with-multibyte-buffer (insert string) (mm-url-decode-entities-nbsp) (buffer-string)))) (defalias 'nnrss-insert 'nnrss-insert-w3) +(defun nnrss-mime-encode-string (string) + (mm-with-multibyte-buffer + (insert string) + (mm-url-decode-entities-nbsp) + (goto-char (point-min)) + (while (re-search-forward "[\t\n ]+" nil t) + (replace-match " ")) + (goto-char (point-min)) + (skip-chars-forward " ") + (delete-region (point-min) (point)) + (goto-char (point-max)) + (skip-chars-forward " ") + (delete-region (point) (point-max)) + (eword-encode-string (buffer-string) (eval '(- -1 (lsh -1 -1)))))) + ;;; Snarf functions (defun nnrss-check-group (group server) @@ -424,7 +530,7 @@ ARTICLE is the article number of the current headline.") (dolist (item (nreverse (nnrss-find-el (intern (concat rss-ns "item")) xml))) (when (and (listp item) (string= (concat rss-ns "item") (car item)) - (if (setq url (nnrss-decode-entities-unibyte-string + (if (setq url (nnrss-decode-entities-string (nnrss-node-text rss-ns 'link (cddr item)))) (not (gethash url nnrss-group-hashtb)) (setq extra (or (nnrss-node-text content-ns 'encoded item) @@ -445,10 +551,10 @@ ARTICLE is the article number of the current headline.") (incf nnrss-group-max) (current-time) url - (and subject (nnrss-decode-entities-unibyte-string subject)) - (and author (nnrss-decode-entities-unibyte-string author)) + (and subject (nnrss-mime-encode-string subject)) + (and author (nnrss-mime-encode-string author)) date - (and extra (nnrss-decode-entities-unibyte-string extra))) + (and extra (nnrss-decode-entities-string extra))) nnrss-group-data) (puthash (or url extra) t nnrss-group-hashtb) (setq changed t)) @@ -540,8 +646,8 @@ It is useful when `(setq nnrss-use-local t)'." (setq category (match-string 1)) (setq url (match-string 2) name (mm-url-decode-entities-string - (rfc2231-decode-encoded-string - (match-string 3)))) + (cadr (mime-decode-parameters + (list "c*" (match-string 3)))))) (if category (setq name (concat category "." name))) (unless (assoc name nnrss-server-data) @@ -550,9 +656,6 @@ It is useful when `(setq nnrss-use-local t)'." (if changed (nnrss-save-server-data "")))) -(defun nnrss-format-string (string) - (gnus-replace-in-string (nnrss-string-as-multibyte string) " *\n *" " ")) - (defun nnrss-node-text (namespace local-name element) (let* ((node (assq (intern (concat namespace (symbol-name local-name))) element)) @@ -577,6 +680,9 @@ Careful with this on large documents!" (mapc (lambda (bit) (when (car-safe bit) (when (equal tag (car bit)) + ;; Old xml.el may return a list of string. + (when (consp (caddr bit)) + (setcar (cddr bit) (caaddr bit))) (setq found-list (append found-list (list bit)))) @@ -790,4 +896,3 @@ prefix), return the prefix." ;;; nnrss.el ends here - diff --git a/texi/ChangeLog b/texi/ChangeLog index 21cbfef..0917c8c 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,9 @@ +2004-12-26 Katsumi Yamaoka + + * gnus-news.texi: Addition. + + * gnus.texi (RSS): Addition. + 2004-12-24 Katsumi Yamaoka * Makefile.in (.texi): Set LANG=C to avoid NLS translations. diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 7e94c74..b34cb7f 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -15137,13 +15137,31 @@ http://w3m.sourceforge.net/ @acronym{RSS} $B$O$H$F$b5,B'E*$+$DNIo$K?7$7$/$7$F$*$/$?$a$N>pJs$rF@$k$3$H$,$G$-$^$9!#(B +$BCm(B: @code{utf-8} coding system $B$r%5%]!<%H$9$k(B Emacs $B$r;H$&$N$,NI$$$G$9!#(B +@acronym{RSS} $B$O!"Hs(B-@acronym{ASCII} $B%F%-%9%H$r%(%s%3!<%I$9$k$?$a$K!"%G%#(B +$B%U%)%k%H$G(B UTF-8 $B$r;H$&$+$i$G$9!#$=$l$O$^$?!"%G%#%U%)%k%H$G(B +$BHs(B-@acronym{ASCII} $B%0%k!<%WL>$K$b;H$o$l$^$9!#(B + @kindex G R ($B35N,(B) Feed $B$r9VFI$9$k$K$O!"35N,%P%C%U%!$+$i(B @kbd{G R} $B$r;H$C$F2<$5$$(B---feed $B$N(B -$B=j:_$NF~NO$r5a$a$i$l$k$G$7$g$&!#(B +$B=j:_!"%?%$%H%k$*$h$S@bL@$NF~NO$r5a$a$i$l$k$G$7$g$&!#%?%$%H%k$O$I$s$JJ8;z(B +$B$G$b$h$/!"$=$l$O%0%k!<%WL>$H%0%k!<%W$N%G!<%?!&%U%!%$%k$NL>A0$K;H$o$l$^$9!#(B +$B@bL@$O>JN,$G$-$^$9!#(B $B4JC1$K(B @code{nnrss} $B$r$O$8$a$kJ}K!$O!"%0%k!<%W%P%C%U%!$G(B @kbd{B nnrss RET y} $B$N$h$&$J$3$H$r>'$(!"$=$7$F%0%k!<%W$r9VFI$9$k$3$H$G$9!#(B +@code{nnrss} $B%P%C%/%(%s%I$O!"$=$l$>$l$N(B @code{nnrss} $B%0%k!<%W$N$?$a$N%G!<(B +$B%?!&%U%!%$%k$r(B @code{nnrss-directory} ($B2<5-;2>H(B) $B$KJ]B8$7$^$9!#(B +$BHs(B-@acronym{ASCII} $BJ8;z$r4^$s$G$$$k%U%!%$%kL>(B +$B$O!"(B@code{nnmail-pathname-coding-system} $BJQ?t$G;XDj$5$l$?(B coding +system $B$G%(%s%3!<%I$5$l$^$9!#$=$l$,(B @code{nil} $B$G$"$k$H!"(BEmacs $B$G(B +$B$O(B coding system $B$O%G%#%U%)%k%H(B +$B$G(B @code{default-file-name-coding-system} $B$NCM$K$J$j$^$9!#$"$J$?(B +$B$,(B XEmacs $B$r;H$C$F$$$F!"Hs(B-@acronym{ASCII} $B%0%k!<%WL>$r;H$$$?$1$l$P!"(B +@code{nnmail-pathname-coding-system} $BJQ?t$NCM$rE,@Z$K@_Dj$7$J$1$l$P$J$j(B +$B$^$;$s!#(B + @cindex OPML $B$"$J$?$N9VFIL\O?$r(B @acronym{OPML} $B%U%)!<%^%C%H(B (Outline Processor Markup Language) $B$G%m!<%I(B/$B%;!<%V$9$k$?$a$K!"0J2<$N%3%^%s%I$r;H$&$3$H$b$G$-$^$9!#(B @@ -15166,6 +15184,13 @@ Language) $B$G%m!<%I(B/$B%;!<%V$9$k$?$a$K!"0J2<$N%3%^%s%I$r;H$&$3$H$b$G$-$^$9 @code{nnrss} $B$,%U%!%$%k$r=q$-9~$`%G%#%l%/%H%j!<$G!"%G%#%U%)%k%H(B $B$O(B @file{~/News/rss/} $B$G$9!#(B +@item nnrss-file-coding-system +@vindex nnrss-file-coding-system +@code{nnrss} $B%0%k!<%W$N%G!<%?!&%U%!%$%k$rFI$_=q$-$9$k$H$-$K;H$o$l(B +$B$k(B coding system $B$G$9!#%G%#%U%)%k%H(B +$B$O(B @code{mm-universal-coding-system} $B$NCM(B ($B$=$N%G%#%U%)%k%H$O(B Emacs $B$G(B +$B$O(B @code{emacs-mule}$B!"(BXEmacs $B$G$O(B @code{escape-quoted}) $B$G$9!#(B + @item nnrss-use-local @vindex nnrss-use-local @findex nnrss-generate-download-script diff --git a/texi/gnus-news.texi b/texi/gnus-news.texi index f8507ba..e67f352 100644 --- a/texi/gnus-news.texi +++ b/texi/gnus-news.texi @@ -107,6 +107,10 @@ See the Gnus manual, section Hashcash, for more information. Use @item Gnus supports a new sort command in the Summary buffer: @kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}). +@item The @code{nnrss} back end now supports multilingual text. +Non-@acronym{ASCII} group names for the @code{nnrss} groups are also +supported. @xref{RSS}. + @end itemize @c gnus-news.texi ends here. diff --git a/texi/gnus.texi b/texi/gnus.texi index 17ccace..118ece5 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -16002,14 +16002,30 @@ changes to a wiki (e.g. @url{http://cliki.net/recent-changes.rdf}). @acronym{RSS} has a quite regular and nice interface, and it's possible to get the information Gnus needs to keep groups updated. +Note: you had better use Emacs which supports the @code{utf-8} coding +system because @acronym{RSS} uses UTF-8 for encoding non-@acronym{ASCII} +text by default. It is also used by default for non-@acronym{ASCII} +group names. + @kindex G R (Summary) -Use @kbd{G R} from the summary buffer to subscribe to a feed---you -will be prompted for the location of the feed. +Use @kbd{G R} from the summary buffer to subscribe to a feed---you will +be prompted for the location, the title and the description of the feed. +The title, which allows any characters, will be used for the group name +and the name of the group data file. The description can be omitted. An easy way to get started with @code{nnrss} is to say something like the following in the group buffer: @kbd{B nnrss RET y}, then subscribe to groups. +The @code{nnrss} back end saves the group data file in +@code{nnrss-directory} (see below) for each @code{nnrss} group. File +names containing non-@acronym{ASCII} characters will be encoded by the +coding system specified with the @code{nnmail-pathname-coding-system} +variable. If it is @code{nil}, in Emacs the coding system defaults to +the value of @code{default-file-name-coding-system}. If you are using +XEmacs and want to use non-@acronym{ASCII} group names, you should set +the value for the @code{nnmail-pathname-coding-system} variable properly. + @cindex OPML You can also use the following commands to import and export your subscriptions from a file in @acronym{OPML} format (Outline Processor @@ -16033,6 +16049,13 @@ The following @code{nnrss} variables can be altered: The directory where @code{nnrss} stores its files. The default is @file{~/News/rss/}. +@item nnrss-file-coding-system +@vindex nnrss-file-coding-system +The coding system used when reading and writing the @code{nnrss} groups +data files. The default is the value of +@code{mm-universal-coding-system} (which defaults to @code{emacs-mule} +in Emacs or @code{escape-quoted} in XEmacs). + @item nnrss-use-local @vindex nnrss-use-local @findex nnrss-generate-download-script