From e6beea6564ce22b2ac780019ece7e2148e90c22b Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Tue, 4 Mar 1997 09:04:53 +0000 Subject: [PATCH] *** empty log message *** --- lisp/ChangeLog | 57 ++++++++++++++++ lisp/browse-url.el | 101 +++++++++++++++++++---------- lisp/gnus-msg.el | 26 ++++---- lisp/gnus-score.el | 2 +- lisp/gnus-vis.el | 158 ++++++++++++++++++++++++++++----------------- lisp/gnus.el | 87 +++++++++++++------------ lisp/message.el | 30 +++++++-- lisp/nndir.el | 9 +-- lisp/nnmh.el | 19 ++++-- lisp/nnspool.el | 2 +- 10 files changed, 323 insertions(+), 168 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 87b962a07..81ad86af0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,62 @@ +Sun Apr 21 19:59:58 1996 Lars Magne Ingebrigtsen + + * message.el (message-bounce): Wrong interactive spec. + (message-bounce): Handle mimeish bounces. + + * nnspool.el (nnspool-inews-switches): Suppress signature. + +Sun Apr 21 19:50:59 1996 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-summary-cancel-article): Cancel using the + proper select method. + + * gnus.el (gnus-find-method-for-group): Allow methods without names. + +Sun Apr 21 16:34:35 1996 Lars Magne Ingebrigtsen + + * nnmh.el (nnmh-request-list-1): New function. + + * gnus.el (gnus-summary-articles-in-thread): Would respond badly + to dummy roots. + + * gnus-msg.el (gnus-article-mail): Use message. + + * gnus-vis.el (gnus-button-reply): Use message. + +Sat Apr 20 04:31:02 1996 Jens Lautenbacher + + * gnus-vis.el: Greyed out much more entries in group-mode's + menubar and started the same for summary-mode. + +Sun Apr 21 15:50:09 1996 Lars Magne Ingebrigtsen + + * gnus-msg.el (gnus-copy-article-buffer): Don't widen + permanently. + + * gnus.el (gnus-read-active-file): Don't nix out active stuff from + foreign servers. + (gnus-summary-find-next): Wouldn't respond properly to dummy + articles. + +Sun Apr 21 15:26:47 1996 Denis Howe + + * browse-url.el: New version installed. + +Sun Apr 21 15:16:07 1996 Lars Magne Ingebrigtsen + + * message.el (message-reply): Respond properly even when answering + to messages with no Message-ID. + +Sat Apr 20 18:16:21 1996 Lars Magne Ingebrigtsen + + * gnus.el (gnus-article-header-rank): Moved. + + * message.el (message-send-mail): Wouldn't resend. + Sat Apr 20 00:20:09 1996 Lars Magne Ingebrigtsen + * gnus.el: September Gnus v0.76 is released. + * nntp.el (nntp-server-opened-hook): Use the default. Sat Apr 20 01:58:15 1996 Lars Magne Ingebrigtsen diff --git a/lisp/browse-url.el b/lisp/browse-url.el index 6596987d1..e8752ed1d 100644 --- a/lisp/browse-url.el +++ b/lisp/browse-url.el @@ -5,7 +5,7 @@ ;; Author: Denis Howe ;; Maintainer: Denis Howe ;; Created: 03 Apr 1995 -;; Version: 0.26 13 Jan 1996 +;; Version: 0.30 23 Mar 1996 ;; Keywords: hypertext ;; X-Home page: http://wombat.doc.ic.ac.uk/ @@ -138,10 +138,10 @@ ;; (add-hook 'dired-mode-hook ;; (function (lambda () ;; (local-set-key "\C-c\C-zf" 'browse-url-of-dired-file)))) -;; (if (boundp 'browse-url-browser-function) -;; (global-set-key "\C-c\C-zu" browse-url-browser-function) -;; (eval-after-load "browse-url" -;; '(global-set-key "\C-c\C-zu" browse-url-browser-function))) + +;; To browse URLs in mail messages by clicking mouse-2: +;; (add-hook 'rmail-mode-hook (function (lambda () ; rmail-mode startup +;; (define-key rmail-mode-map [mouse-2] 'browse-url-at-mouse)))) ;; To use the Emacs w3 browser when not running under X11: ;; (or (eq window-system 'x) @@ -173,8 +173,7 @@ ;; ;; (add-hook 'browse-url-of-file-hook 'browse-url-netscape-reload) -;; You may also want to customise browse-url-netscape-arguments, eg. -;; +;; You may also want to customise browse-url-netscape-arguments, e.g. ;; (setq browse-url-netscape-arguments '("-install")) ;; ;; or similarly for the other browsers. @@ -285,9 +284,25 @@ ;; run Lynx in an Emacs buffer under terminal-emulator. ;; Thanks Jari Aalto +;; 0.27 27 Feb 1996 +;; Changed event-buffer and event-point from macros to functions. +;; Other fixes for byte-compilation. + +;; 0.28 07 Mar 1996 +;; browse-url-lynx-emacs uses term.el instead of terminal.el. + +;; 0.29 13 Mar 1996 +;; Added browse-url-CCI-host. Thanks Greg Marr . + +;; 0.30 23 Mar 1996 +;; Contact/start Netscape in the background. +;; Thanks Per Abrahamsen + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Code: +(eval-when-compile (require 'dired)) + (defvar browse-url-regexp "\\(https?://\\|ftp://\\|gopher://\\|telnet://\\|wais://\\|file:/\\|s?news:\\|mailto:\\)[^]\t\n \"'()<>[^`{}]*[^]\t\n \"'()<>[^`{}.,;]+" "A regular expression probably matching a URL.") @@ -345,6 +360,11 @@ which is 30 on SunOS and 16 on HP-UX and Solaris.") This can be any number between 1024 and 65535 but must correspond to the value set in the browser.") +(defvar browse-url-CCI-host "localhost" + "*Host to access XMosaic via CCI. +This should be the host name of the machine running XMosaic with CCI +enabled. The port number should be set in `browse-url-CCI-port'.") + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; URL input @@ -385,13 +405,15 @@ The URL is loaded according to the value of `browse-url-browser-function'." ;; Define these if not already defined (XEmacs compatibility) -(or (fboundp 'event-buffer) - (defmacro event-buffer (event) - `(window-buffer (posn-window (event-start ,event))))) +(eval-and-compile + (or (fboundp 'event-buffer) + (defun event-buffer (event) + (window-buffer (posn-window (event-start event)))))) -(or (fboundp 'event-point) - (defmacro event-point (event) - `(posn-point (event-start ,event)))) +(eval-and-compile + (or (fboundp 'event-point) + (defun event-point (event) + (posn-point (event-start event))))) (defun browse-url-at-mouse (event) "Ask a WWW browser to load a URL clicked with the mouse. @@ -526,24 +548,27 @@ used instead of browse-url-new-window-p." (list (not (eq (null browse-url-new-window-p) (null current-prefix-arg)))))) (let ((process (apply 'start-process - (concat "netscape " url) nil - browse-url-netscape-command - (append browse-url-netscape-arguments - (if new-window '("-noraise")) - (list "-remote" - (concat "openURL(" url - (if new-window ",new-window") - ")")))))) - (set-process-sentinel - process - `(lambda (process change) - (or (eq (process-exit-status process) 0) - (progn - ;; Netscape not running - start it - (message "Starting Netscape...") - (apply 'start-process (concat "netscape" ,url) nil - browse-url-netscape-command - (append browse-url-netscape-arguments (list ,url))))))))) + (concat "netscape " url) nil + browse-url-netscape-command + (append browse-url-netscape-arguments + (if new-window '("-noraise")) + (list "-remote" + (concat "openURL(" url + (if new-window ",new-window") + ")")))))) + (set-process-sentinel process + (list 'lambda '(process change) + (list 'browse-url-netscape-sentinel 'process url))))) + +(defun browse-url-netscape-sentinel (process url) + "Handle a change to the process communicating with Netscape." + (or (eq (process-exit-status process) 0) + (progn + ;; Netscape not running - start it + (message "Starting Netscape...") + (apply 'start-process (concat "netscape" url) nil + browse-url-netscape-command + (append browse-url-netscape-arguments (list url)))))) (defun browse-url-netscape-reload () "Ask Netscape to reload its current document." @@ -610,7 +635,7 @@ used instead of browse-url-new-window-p." (list (not (eq (null browse-url-new-window-p) (null current-prefix-arg)))))) (open-network-stream "browse-url" " *browse-url*" - "localhost" browse-url-CCI-port) + browse-url-CCI-host browse-url-CCI-port) ;; Todo: start browser if fails (process-send-string "browse-url" (concat "get url (" url ") output " @@ -640,12 +665,20 @@ in an Xterm window." (interactive (browse-url-interactive-arg "Lynx URL: ")) (start-process (concat "lynx" url) nil "xterm" "-e" "lynx" url)) +(eval-when-compile (require 'term)) + (defun browse-url-lynx-emacs (url) "Ask the Lynx WWW browser to load URL. -Default to the URL around or before point. A new Lynx process is run -in an Emacs buffer using terminal-emulator." +Default to the URL around or before point. Run a new Lynx process in +an Emacs buffer." (interactive (browse-url-interactive-arg "Lynx URL: ")) (let ((system-uses-terminfo t)) ; Lynx uses terminfo + (if (fboundp 'make-term) + (let ((term-term-name "vt100")) + (set-buffer (make-term "browse-url" "lynx" nil url)) + (term-mode) + (term-char-mode) + (switch-to-buffer "*browse-url*"))) (terminal-emulator "*browse-url*" "lynx" (list url)))) (provide 'browse-url) diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el index 0914b74a1..8da163e7e 100644 --- a/lisp/gnus-msg.el +++ b/lisp/gnus-msg.el @@ -235,6 +235,9 @@ If prefix argument YANK is non-nil, original article is yanked automatically." (interactive "P") (gnus-set-global-variables) (let ((articles (gnus-summary-work-articles n)) + (message-post-method + `(lambda (arg) + (gnus-post-method nil ,gnus-newsgroup-name))) article) (while (setq article (pop articles)) (when (gnus-summary-select-article t nil nil article) @@ -267,14 +270,15 @@ header line with the old Message-ID." (or (memq gnus-article-copy gnus-buffer-list) (setq gnus-buffer-list (cons gnus-article-copy gnus-buffer-list))) (let ((article-buffer (or article-buffer gnus-article-buffer))) - (if (and (get-buffer article-buffer) - (buffer-name (get-buffer article-buffer))) - (save-excursion - (set-buffer article-buffer) + (when (and (get-buffer article-buffer) + (buffer-name (get-buffer article-buffer))) + (save-excursion + (set-buffer article-buffer) + (save-restriction (widen) (copy-to-buffer gnus-article-copy (point-min) (point-max)) (gnus-set-text-properties (point-min) (point-max) - nil gnus-article-copy))) + nil gnus-article-copy)))) gnus-article-copy)) (defun gnus-post-news (post &optional group header article-buffer yank subject @@ -508,8 +512,7 @@ If prefix argument YANK is non-nil, original article is yanked automatically." (gnus-inews-yank-articles yank))))) (defun gnus-summary-reply-with-original (n) - "Reply mail to news author with original article. -Customize the variable gnus-mail-reply-method to use another mailer." + "Reply mail to news author with original article." (interactive "P") (gnus-summary-reply (gnus-summary-work-articles n))) @@ -645,10 +648,11 @@ If YANK is non-nil, include the original article." (buffer-substring (save-excursion (re-search-backward "[ \t\n]" nil t) (1+ (point))) (save-excursion (re-search-forward "[ \t\n]" nil t) (1- (point)))))) - (and address - (progn - (switch-to-buffer gnus-summary-buffer) - (gnus-mail-reply yank address))))) + (when address + (switch-to-buffer gnus-summary-buffer) + (message-reply address) + (when yank + (gnus-inews-yank-articles yank))))) (defun gnus-bug () "Send a bug report to the Gnus maintainers." diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index 36312d848..4a2664135 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -726,7 +726,7 @@ SCORE is the score to add." (defun gnus-score-change-score-file (file) "Change current score alist." (interactive - (list (read-file-name "Edit score file: " gnus-kill-files-directory))) + (list (read-file-name "Change to score file: " gnus-kill-files-directory))) (gnus-score-load-file file) (gnus-set-mode-line 'summary)) diff --git a/lisp/gnus-vis.el b/lisp/gnus-vis.el index ada6f81c8..e23c2bbd9 100644 --- a/lisp/gnus-vis.el +++ b/lisp/gnus-vis.el @@ -31,6 +31,7 @@ (require 'easymenu) (require 'custom) (require 'browse-url) +(require 'gnus-score) (eval-when-compile (require 'cl)) (defvar gnus-group-menu-hook nil @@ -321,7 +322,8 @@ ticked: The number of ticked articles in the group. '("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"] + ["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)] @@ -335,8 +337,13 @@ ticked: The number of ticked articles in the group. ["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 - (gnus-group-group-name)] + (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)] @@ -350,32 +357,45 @@ ticked: The number of ticked articles in the group. ["List all 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] + ["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] + ["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 t] - ["Sort by method" gnus-group-sort-groups-by-method t] - ["Sort by rank" gnus-group-sort-groups-by-rank t] - ["Sort by score" gnus-group-sort-groups-by-score t] - ["Sort by level" gnus-group-sort-groups-by-level t] - ["Sort by unread" gnus-group-sort-groups-by-unread t] - ["Sort by name" gnus-group-sort-groups-by-alphabet t]) + ["Default sort" gnus-group-sort-groups + (not gnus-topic-mode)] + ["Sort by method" gnus-group-sort-groups-by-method + (not gnus-topic-mode)] + ["Sort by rank" gnus-group-sort-groups-by-rank + (not gnus-topic-mode)] + ["Sort by score" gnus-group-sort-groups-by-score + (not gnus-topic-mode)] + ["Sort by level" gnus-group-sort-groups-by-level + (not gnus-topic-mode)] + ["Sort by unread" gnus-group-sort-groups-by-unread + (not gnus-topic-mode)] + ["Sort by name" gnus-group-sort-groups-by-alphabet + (not gnus-topic-mode)]) ("Mark" - ["Mark group" gnus-group-mark-group (gnus-group-group-name)] - ["Unmark group" gnus-group-unmark-group (gnus-group-group-name)] - ["Unmark all" gnus-group-unmark-all-groups t] - ["Mark regexp" gnus-group-mark-regexp t] - ["Mark region" gnus-group-mark-region t] + ["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 (region-exists-p)] ["Mark buffer" gnus-group-mark-buffer t] - ["Execute command" gnus-group-universal-argument t]) + ["Execute command" gnus-group-universal-argument + (or gnus-group-marked (gnus-group-group-name))]) ("Subscribe" ["Subscribe to random group" gnus-group-unsubscribe-group t] - ["Kill all newsgroups in region" gnus-group-kill-region t] + ["Kill all newsgroups in region" gnus-group-kill-region + (region-exists-p)] ["Kill all zombie groups" gnus-group-kill-all-zombies gnus-zombie-list] ["Kill all groups on level..." gnus-group-kill-level t]) @@ -388,8 +408,12 @@ ticked: The number of ticked articles in the group. ["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 t] - ["Delete group" gnus-group-delete-group 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)] @@ -397,7 +421,8 @@ ticked: The number of ticked articles in the group. (gnus-group-group-name)] ["Info" gnus-group-edit-group (gnus-group-group-name)]) ("Score file" - ["Flush cache" gnus-score-flush-cache t]) + ["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] @@ -411,7 +436,7 @@ ticked: The number of ticked articles in the group. ["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] + ["Read a directory as a group..." gnus-group-enter-directory t] )) (easy-menu-define @@ -419,9 +444,9 @@ ticked: The number of ticked articles in the group. '("Misc" ["Send a bug report" gnus-bug t] ["Send a mail" gnus-group-mail t] - ["Post an article" gnus-group-post-news t] + ["Post an article..." gnus-group-post-news t] ["Customize score file" gnus-score-customize - (not (string-match "XEmacs" emacs-version)) ] + (not (string-match "XEmacs" emacs-version))] ["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] @@ -430,7 +455,7 @@ ticked: The number of ticked articles in the group. ["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 expirable articles" gnus-group-expire-all-groups 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] @@ -464,13 +489,15 @@ ticked: The number of ticked articles in the group. ("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 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-exlcuded-as-read t]) + ["Catchup region" gnus-summary-mark-region-as-read + (region-exists-p)] + ["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] @@ -479,18 +506,18 @@ ticked: The number of ticked articles in the group. ["Set bookmark" gnus-summary-set-bookmark t] ["Remove bookmark" gnus-summary-remove-bookmark t]) ("Limit" - ["Unread" gnus-summary-limit-to-unread t] - ["Marks" gnus-summary-limit-to-marks t] + ["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] - ["Subject" gnus-summary-limit-to-subject t] - ["Author" gnus-summary-limit-to-author 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] + ;;["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] @@ -498,8 +525,8 @@ ticked: The number of ticked articles in the group. ["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 region" gnus-uu-mark-region (region-exists-p)] + ["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] @@ -550,11 +577,13 @@ ticked: The number of ticked articles in the group. ("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] + ["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 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] )) @@ -565,7 +594,7 @@ ticked: The number of ticked articles in the group. "Score" (nconc (list - ["Enter score" gnus-summary-score-entry t]) + ["Enter score..." gnus-summary-score-entry t]) (gnus-visual-score-map 'increase) (gnus-visual-score-map 'lower) '(("Mark" @@ -576,15 +605,15 @@ ticked: The number of ticked articles in the group. ["Current score" gnus-summary-current-score t] ["Set score" gnus-summary-set-score t] ["Customize score file" gnus-score-customize t] - ["Switch current score file" gnus-score-change-score-file t] - ["Set mark below" gnus-score-set-mark-below t] - ["Set expunge below" gnus-score-set-expunge-below t] + ["Switch current score file..." gnus-score-change-score-file t] + ["Set mark below..." gnus-score-set-mark-below t] + ["Set expunge below..." gnus-score-set-expunge-below t] ["Edit current score file" gnus-score-edit-current-scores t] ["Edit score file" gnus-score-edit-file t] ["Trace score" gnus-score-find-trace t] ["Rescore buffer" gnus-summary-rescore t] - ["Increase score" gnus-summary-increase-score t] - ["Lower score" gnus-summary-lower-score t])))) + ["Increase score..." gnus-summary-increase-score t] + ["Lower score..." gnus-summary-lower-score t])))) '(("Default header" ["Ask" (gnus-score-set-default 'gnus-score-default-header nil) @@ -739,15 +768,24 @@ ticked: The number of ticked articles in the group. ["Pipe through a filter" gnus-summary-pipe-output t] ["Add to SOUP packet" gnus-soup-add-article t]) ("Backend" - ["Respool article" gnus-summary-respool-article t] - ["Move article" gnus-summary-move-article t] - ["Copy article" gnus-summary-copy-article t] - ["Crosspost article" gnus-summary-crosspost-article t] - ["Import file" gnus-summary-import-article t] - ["Edit article" gnus-summary-edit-article t] - ["Delete article" gnus-summary-delete-article t] + ["Respool article..." gnus-summary-respool-article t] + ["Move article..." gnus-summary-move-article + (gnus-check-backend-function + 'request-move-article gnus-newsgroup-name)] + ["Copy article..." gnus-summary-copy-article t] + ["Crosspost article..." gnus-summary-crosspost-article + (gnus-check-backend-function + 'request-replace-article gnus-newsgroup-name)] + ["Import file..." gnus-summary-import-article t] + ["Edit article" gnus-summary-edit-article + (not (gnus-group-read-only-p))] + ["Delete article" gnus-summary-delete-article + (gnus-check-backend-function + 'request-expire-articles gnus-newsgroup-name)] ["Query respool" gnus-summary-respool-query t] - ["Delete expirable articles" gnus-summary-expire-articles-now t]) + ["Delete expirable articles" gnus-summary-expire-articles-now + (gnus-check-backend-function + 'request-expire-articles gnus-newsgroup-name)]) ("Extract" ["Uudecode" gnus-uu-decode-uu t] ["Uudecode and save" gnus-uu-decode-uu-and-save t] @@ -757,9 +795,9 @@ ticked: The number of ticked articles in the group. ["Binhex" gnus-uu-decode-binhex t] ["Postscript" gnus-uu-decode-postscript t]) ["Enter digest buffer" gnus-summary-enter-digest-group t] - ["Isearch article" gnus-summary-isearch-article t] - ["Search articles forward" gnus-summary-search-article-forward t] - ["Search articles backward" gnus-summary-search-article-backward t] + ["Isearch article..." gnus-summary-isearch-article t] + ["Search articles forward..." gnus-summary-search-article-forward t] + ["Search articles backward..." gnus-summary-search-article-backward t] ["Beginning of the article" gnus-summary-beginning-of-article t] ["End of the article" gnus-summary-end-of-article t] ["Fetch parent of article" gnus-summary-refer-parent-article t] @@ -806,9 +844,9 @@ ticked: The number of ticked articles in the group. ["Send bounced mail" gnus-summary-resend-bounced-mail t] ["Send a mail" gnus-summary-mail-other-window t] ["Uuencode and post" gnus-uu-post-news t] - ("Draft" - ["Send" gnus-summary-send-draft t] - ["Send bounced" gnus-resend-bounced-mail t]) + ;;("Draft" + ;;["Send" gnus-summary-send-draft t] + ;;["Send bounced" gnus-resend-bounced-mail t]) )) (run-hooks 'gnus-summary-menu-hook) )) @@ -1492,7 +1530,7 @@ specified by `gnus-button-alist'." (defun gnus-button-reply (address) ;; Reply to ADDRESS. - (gnus-mail-reply t address)) + (message-reply t address)) (defun gnus-button-url (address) "Browse ADDRESS." diff --git a/lisp/gnus.el b/lisp/gnus.el index 3ebec592f..51a782f73 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -1702,13 +1702,13 @@ 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 "September Gnus v0.76" +(defconst gnus-version "September Gnus v0.77" "Version number for this version of Gnus.") (defvar gnus-info-nodes - '((gnus-group-mode "(gnus)The Group Buffer") - (gnus-summary-mode "(gnus)The Summary Buffer") - (gnus-article-mode "(gnus)The Article Buffer")) + '((gnus-group-mode "(gnus)The Group Buffer") + (gnus-summary-mode "(gnus)The Summary Buffer") + (gnus-article-mode "(gnus)The Article Buffer")) "Assoc list of major modes and related Info nodes.") (defvar gnus-group-buffer "*Group*") @@ -9377,12 +9377,14 @@ If EXCLUDE-GROUP, do not go to this group." (defun gnus-summary-find-next (&optional unread article backward) (if backward (gnus-summary-find-prev) - (let* ((article (or article (gnus-summary-article-number))) + (let* ((dummy (gnus-summary-article-intangible-p)) + (article (or article (gnus-summary-article-number))) (arts (gnus-data-find-list article)) result) - (when (or (not gnus-summary-check-current) - (not unread) - (not (gnus-data-unread-p (car arts)))) + (when (and (not dummy) + (or (not gnus-summary-check-current) + (not unread) + (not (gnus-data-unread-p (car arts))))) (setq arts (cdr arts))) (when (setq result (if unread @@ -12325,26 +12327,26 @@ with that article." (gnus-simplify-subject-fuzzy (mail-header-subject (gnus-data-header (car data))))) (t nil))) + (end-point (save-excursion + (gnus-summary-go-to-next-thread) (point))) articles) - (if (not data) - () ; This article doesn't exist. - (while data - (and (or (not top-subject) - (string= top-subject - (if (eq gnus-thread-operation-ignore-subject 'fuzzy) - (gnus-simplify-subject-fuzzy - (mail-header-subject - (gnus-data-header (car data)))) - (gnus-simplify-subject-re + (while (and data + (< (gnus-data-pos (car data)) end-point)) + (and (or (not top-subject) + (string= top-subject + (if (eq gnus-thread-operation-ignore-subject 'fuzzy) + (gnus-simplify-subject-fuzzy (mail-header-subject - (gnus-data-header (car data))))))) - (setq articles (cons (gnus-data-number (car data)) articles))) - (if (and (setq data (cdr data)) - (> (gnus-data-level (car data)) top-level)) - () - (setq data nil))) - ;; Return the list of articles. - (nreverse articles)))) + (gnus-data-header (car data)))) + (gnus-simplify-subject-re + (mail-header-subject + (gnus-data-header (car data))))))) + (setq articles (cons (gnus-data-number (car data)) articles))) + (unless (and (setq data (cdr data)) + (> (gnus-data-level (car data)) top-level)) + (setq data nil))) + ;; Return the list of articles. + (nreverse articles))) (defun gnus-summary-rethread-current () "Rethread the thread the current article is part of." @@ -13610,6 +13612,17 @@ Provided for backwards compatibility." gnus-inhibit-hiding (gnus-article-hide-headers))) +(defsubst gnus-article-header-rank () + "Give the rank of the string HEADER as given by `gnus-sorted-header-list'." + (let ((list gnus-sorted-header-list) + (i 0)) + (while list + (when (looking-at (car list)) + (setq list nil)) + (setq list (cdr list)) + (incf i)) + i)) + (defun gnus-article-hide-headers (&optional arg delete) "Toggle whether to hide unwanted headers and possibly sort them as well. If given a negative prefix, always show; if given a positive prefix, @@ -13676,17 +13689,6 @@ always hide." ;; Suggested by Sudish Joseph . (gnus-hide-text-type beg (point-max) 'headers))))))))) -(defsubst gnus-article-header-rank () - "Give the rank of the string HEADER as given by `gnus-sorted-header-list'." - (let ((list gnus-sorted-header-list) - (i 0)) - (while list - (when (looking-at (car list)) - (setq list nil)) - (setq list (cdr list)) - (incf i)) - i)) - (defun gnus-article-hide-boring-headers (&optional arg) "Toggle hiding of headers that aren't very interesting. If given a negative prefix, always show; if given a positive prefix, @@ -15021,9 +15023,12 @@ If GROUP is nil, all groups on METHOD are scanned." (gnus-server-extend-method group method)) (t method))) - (if (equal (cadr method) "") - method - (gnus-server-add-address method)))))) + (cond ((equal (cadr method) "") + method) + ((null (cadr method)) + (list (car method) "")) + (t + (gnus-server-add-address method))))))) (defun gnus-check-backend-function (func group) "Check whether GROUP supports function FUNC." @@ -15829,7 +15834,7 @@ Returns whether the updating was successful." (unless (equal method gnus-message-archive-method) (gnus-error 1 "Cannot read active file from %s server." (car method))) - (gnus-active-to-gnus-format method) + (gnus-active-to-gnus-format method gnus-active-hashtb) ;; We mark this active file as read. (push method gnus-have-read-active-file) (gnus-message 5 "%sdone" mesg)))))) diff --git a/lisp/message.el b/lisp/message.el index 7e96d373b..904bce880 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -1144,8 +1144,9 @@ the user from the mailer." ;; We must not do that for a resend ;; because we would find the original addresses. ;; For a resend, include the specific addresses. - (or resend-to-addresses - '("-t"))))) + (if resend-to-addresses + (list resend-to-addresses) + '("-t"))))) (when message-interactive (save-excursion (set-buffer errbuf) @@ -2082,8 +2083,10 @@ Headers already prepared in the buffer are not modified." (message-setup `((Subject . ,subject) ,@follow-to - (References . ,(concat (or references "") (and references " ") - (or message-id "")))) + ,@(if (or references message-id) + `((References . ,(concat (or references "") (and references " ") + (or message-id "")))) + nil)) cur))) ;;;###autoload @@ -2341,13 +2344,26 @@ Optional NEWS will use news to forward instead of mail." This only makes sense if the current message is a bounce message than contains some mail you have written which has been bounced back to you." - (interactive "P") - (let ((cur (current-buffer))) + (interactive) + (let ((cur (current-buffer)) + boundary) (message-pop-to-buffer "*mail message*") (insert-buffer-substring cur) (undo-boundary) + (message-narrow-to-head) + (if (and (mail-fetch-field "Mime-Version") + (setq boundary (mail-fetch-field "Content-Type"))) + (if (string-match "boundary=\"\\([^\"]+\\)\"" boundary) + (setq boundary (concat (match-string 1 boundary) " *\n" + "Content-Type: message/rfc822")) + (setq boundary nil))) + (widen) (goto-char (point-min)) - (or (and (re-search-forward mail-unsent-separator nil t) + (search-forward "\n\n" nil t) + (or (and boundary + (re-search-forward boundary nil t) + (forward-line 2)) + (and (re-search-forward mail-unsent-separator nil t) (forward-line 1)) (and (search-forward "\n\n" nil t) (re-search-forward "^Return-Path:.*\n" nil t))) diff --git a/lisp/nndir.el b/lisp/nndir.el index 4553109d7..dd7fa8ade 100644 --- a/lisp/nndir.el +++ b/lisp/nndir.el @@ -90,12 +90,9 @@ (nnml-retrieve-headers 0 nndir-current-group 0 0) (nnmh-request-article 0 nndir-current-group 0 0) (nnmh-request-group nndir-current-group 0 0) - (nnmh-close-group nndir-current-group 0)) - -(nnoo-import nndir - (nnmh - nnmh-request-list - nnmh-request-newgroups)) + (nnmh-close-group nndir-current-group 0) + (nnmh-request-list (nnoo-current-server 'nndir) nndir-directory) + (nnmh-request-newsgroups (nnoo-current-server 'nndir) nndir-directory)) (provide 'nndir) diff --git a/lisp/nnmh.el b/lisp/nnmh.el index eb4cea3fa..019b9fddb 100644 --- a/lisp/nnmh.el +++ b/lisp/nnmh.el @@ -179,9 +179,15 @@ (nnmail-get-new-mail 'nnmh nil nnmh-directory group)) (deffoo nnmh-request-list (&optional server dir) - (unless dir - (nnheader-insert "") - (setq dir (file-truename (file-name-as-directory nnmh-directory)))) + (nnheader-insert "") + (let ((nnmh-toplev + (or dir (file-truename (file-name-as-directory nnmh-directory))))) + (nnmh-request-list-1 nnmh-toplev)) + (setq nnmh-group-alist (nnmail-get-active)) + t) + +(defvar nnmh-toplev) +(defun nnmh-request-list-1 (dir) (setq dir (expand-file-name dir)) ;; Recurse down all directories. (let ((dirs (and (file-readable-p dir) @@ -193,9 +199,9 @@ (when (and (not (string-match "/\\.\\.?$" dir)) (file-directory-p dir) (file-readable-p dir)) - (nnmh-request-list nil dir)))) + (nnmh-request-list-1 dir)))) ;; For each directory, generate an active file line. - (unless (string= (expand-file-name nnmh-directory) dir) + (unless (string= (expand-file-name nnmh-toplev) dir) (let ((files (mapcar (lambda (name) (string-to-int name)) (directory-files dir nil "^[0-9]+$" t)))) @@ -209,12 +215,11 @@ (progn (string-match (file-truename (file-name-as-directory - (expand-file-name nnmh-directory))) dir) + (expand-file-name nnmh-toplev))) dir) (nnheader-replace-chars-in-string (substring dir (match-end 0)) ?/ ?.)) (apply (function max) files) (apply (function min) files))))))) - (setq nnmh-group-alist (nnmail-get-active)) t) (deffoo nnmh-request-newgroups (date &optional server) diff --git a/lisp/nnspool.el b/lisp/nnspool.el index 9758fc3a2..d51fe1357 100644 --- a/lisp/nnspool.el +++ b/lisp/nnspool.el @@ -38,7 +38,7 @@ "Program to post news. This is most commonly `inews' or `injnews'.") -(defvoo nnspool-inews-switches '("-h") +(defvoo nnspool-inews-switches '("-h" "-S") "Switches for nnspool-request-post to pass to `inews' for posting news. If you are using Cnews, you probably should set this variable to nil.") -- 2.34.1