*** pub/dgnus/lisp/browse-url.el Sat Jul 15 20:39:31 1995 --- dgnus/lisp/browse-url.el Fri Jul 14 15:32:53 1995 *************** *** 0 **** --- 1,439 ---- + ;;; browse-url.el --- ask a WWW browser to load a URL + + ;; Copyright 1995 Free Software Foundation, Inc. + + ;; Author: Denis Howe + ;; Maintainer: Denis Howe + ;; Created: 03 Apr 1995 + ;; Version: 0.16 17 May 1995 + ;; Keywords: hypertext + ;; X-Home page: http://wombat.doc.ic.ac.uk/ + + ;; This file is part of GNU Emacs. + + ;; GNU Emacs is free software; you can redistribute it and/or modify + ;; it under the terms of the GNU General Public License as published + ;; by the Free Software Foundation; either version 1, or (at your + ;; option) any later version. + + ;; GNU Emacs is distributed in the hope that it will be useful, but + ;; WITHOUT ANY WARRANTY; without even the implied warranty of + ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + ;; General Public License for more details. + + ;; You should have received a copy of the GNU General Public License + ;; along with GNU Emacs; see the file COPYING. If not, write to the + ;; Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;; Commentary: + + ;; The latest version of this package should be available from + ;; . + + ;; This package provides functions which read a URL (Uniform Resource + ;; Locator) from the minibuffer, defaulting to the URL around point, + ;; and ask a World-Wide Web browser to load it. It can also load the + ;; URL associated with the current buffer. Different browsers use + ;; different methods of remote control so there is one function for + ;; each supported browser. If the chosen browser is not running, it + ;; is started. Currently there is support for: + + ;; Function Browser Earliest version + ;; browse-url-netscape Netscape 1.1b1 + ;; browse-url-mosaic XMosaic <= 2.4 + ;; browse-url-w3 w3 0 + ;; browse-url-iximosaic IXI Mosaic ? + + ;; Note that earlier versions of Netscape did not have remote control. + ;; and + ;; . + + ;; If using Mosaic, check the definition of browse-url-usr1-signal + ;; below. + ;; + + ;; William M. Perry's excellent "w3" WWW browser for + ;; Emacs + ;; has a function w3-follow-url-at-point, but that + ;; doesn't let you edit the URL like browse-url. + + ;; I recommend Nelson Minar 's excellent + ;; html-helper-mode.el for editing HTML and thank Nelson for + ;; his many useful comments on this code. + ;; + + ;; This package generalises function html-previewer-process in Marc + ;; Andreessen 's html-mode (LCD + ;; modes/html-mode.el.Z) and provides better versions of the URL + ;; functions in Michelangelo Grigni 's ffap.el + ;; (find-file-at-point) . The huge + ;; hyperbole package also contains similar functions. + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Help! + + ;; Can you write and test some code for the Macintrash and Windoze + ;; Netscape remote control APIs? (See the URL above). + + ;; Did earlier versions of Mosaic have remote control? + + ;; Do any other browsers have remote control? + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Installation + + ;; In your ~/.emacs, put: + ;; + ;; (setq browse-url-browser-function + ;; (if (eq window-system 'x) + ;; 'browse-url-netscape ; or browse-url-mosaic + ;; 'browse-url-w3)) + ;; (autoload browse-url-browser-function "browse-url.el" + ;; "Ask a WWW browser to show a URL." t) + ;; Bind this to control-X w (normally undefined): + ;; (global-set-key "\C-xw" browse-url-browser-function) + ;; ;; Note: no quote ^ + + ;; For viewing current buffer: + ;; + ;; (autoload 'browse-url-of-file "browse-url.el" + ;; "Ask a WWW browser to display the current file." t) + ;; (setq browse-url-save-file t) ; Always save + + ;; To get round the Netscape caching problem, you could try either of + ;; the following (but not both). EITHER write-file in + ;; html-helper-mode makes Netscape reload document: + ;; + ;; (autoload 'browse-url-netscape-reload "browse-url.el" + ;; "Ask a WWW browser to redisplay the current file." t) + ;; (add-hook 'html-helper-mode-hook + ;; (function (lambda () + ;; (add-hook 'local-write-file-hooks + ;; (function (lambda () + ;; (let ((local-write-file-hooks)) + ;; (save-buffer)) + ;; (browse-url-netscape-reload) + ;; t)) ; => file written by hook + ;; t)))) ; append to l-w-f-hooks + ;; + ;; [Does this work for html-mode too?] + + ;; OR browse-url-of-file ask Netscape to load and then reload the + ;; file: + ;; + ;; (add-hook 'browse-url-of-file-hook 'browse-url-netscape-reload) + + ;; You may also want to customise browse-url-netscape-arguments, eg. + ;; + ;; (setq browse-url-netscape-arguments '("-install")) + ;; + ;; or similarly for the other browsers. + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;; Change Log: + + ;; 0.00 03 Apr 1995 Denis Howe + ;; Created. + + ;; 0.01 04 Apr 1995 + ;; All names start with "browse-url-". Added provide. + + ;; 0.02 05 Apr 1995 + ;; Save file at start of browse-url-of-file. + ;; Use start-process instead of start-process-shell-command. + + ;; 0.03 06 Apr 1995 + ;; Add browse-url-netscape-reload, browse-url-netscape-command. + ;; browse-url-of-file save file option. + + ;; 0.04 08 Apr 1995 + ;; b-u-file-url separate function. Change b-u-filename-alist + ;; default. + + ;; 0.05 09 Apr 1995 + ;; Added b-u-of-file-hook. + + ;; 0.06 11 Apr 1995 + ;; Improved .emacs suggestions and documentation. + + ;; 0.07 13 Apr 1995 + ;; Added browse-url-interactive-arg optional prompt. + + ;; 0.08 18 Apr 1995 + ;; Exclude final "." from browse-url-regexp. + + ;; 0.09 21 Apr 1995 + ;; Added mouse-set-point to browse-url-interactive-arg. + + ;; 0.10 24 Apr 1995 + ;; Added Mosaic signal sending variations. + ;; Thanks Brian K Servis . + ;; Don't use xprop for Netscape. + + ;; 0.11 25 Apr 1995 + ;; Fix reading of ~/.mosaicpid. Thanks Dag.H.Wanvik@kvatro.no. + + ;; 0.12 27 Apr 1995 + ;; Interactive prefix arg => URL *after* point. + ;; Thanks Michelangelo Grigni . + ;; Added IXI Mosaic support. + ;; Thanks David Karr . + + ;; 0.13 28 Apr 1995 + ;; Exclude final [,;] from browse-url-regexp. + + ;; 0.14 02 May 1995 + ;; Provide browser argument variables. + + ;; 0.15 07 May 1995 + ;; More Netscape options. Thanks Peter Arius + ;; . + + ;; 0.16 17 May 1995 + ;; Added browse-url-at-mouse. + ;; Thanks Wayne Mesard + + ;; 0.17 27 Jun 1995 + ;; Renamed browse-url-at-point to browse-url-url-at-point. + ;; Added browse-url-at-point. + ;; Thanks Jonathan Cano . + + ;; Netscape can cache Web pages so it may be necessary to tell it to + ;; reload the current page if it has changed (eg. if you have edited + ;; it). There is currently no perfect automatic solution to this. + + ;; Netscape allows you to specify the id of the window you want to + ;; control but which window DO you want to control and how do you + ;; discover its id? + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;; Code: + + (defvar browse-url-regexp + "\\(https?://\\|ftp://\\|gopher://\\|telnet://\\|wais://\\|file:/\\|s?news:\\|mailto:\\)[^]\t\n \"'()<>[^`{}]*[^]\t\n \"'()<>[^`{}.,;]+" + "A regular expression probably matching a URL.") + + (defvar browse-url-browser-function + 'browse-url-netscape + "*Function to display the current buffer in a WWW browser. + Used by function `browse-url-of-file'.") + + (defvar browse-url-netscape-arguments nil + "*A list of strings to pass to Netscape as arguments.") + + (defvar browse-url-netscape-new-window-p nil + "*If non-nil, Netscape always opens a new window. + Passing an interactive argument to \\[browse-url-netscape] reverses + the effect of this variable. Requires Netscape version 1.1N or + later.") + + (defvar browse-url-mosaic-arguments nil + "*A list of strings to pass to Mosaic as arguments.") + + (defvar browse-url-filename-alist + '(("^/+" . "file:/")) + "An alist of (REGEXP . STRING) pairs. + Any substring of a filename matching one of the REGEXPs is replaced by + the corresponding STRING. All pairs are applied in the order given. + Used by function `browse-url-of-file'.") + + (defvar browse-url-save-file nil + "If non-nil, save the buffer before displaying its file. + Used by function `browse-url-of-file'.") + + (defvar browse-url-of-file-hook nil + "A hook to be run with run-hook after `browse-url-of-file' has asked + a browser to load a file. + + Set this to `browse-url-netscape-reload' to force Netscape to load the + file rather than displaying a cached copy.") + + (defvar browse-url-usr1-signal + (if (and (boundp 'emacs-major-version) + (or (> emacs-major-version 19) (>= emacs-minor-version 29))) + 'sigusr1 + 30) ; Check /usr/include/signal.h. + "The argument to `signal-process' for sending SIGUSR1 to XMosaic. + Emacs 19.29 accepts 'sigusr1, earlier versions require an integer + which is 30 on SunOS and 16 on HP-UX and Solaris.") + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; URL input + + ;; thingatpt.el doesn't work for complex regexps. + + (defun browse-url-url-at-point () + "Return the URL around or before point. + Then search backwards for the start of a URL. If no URL found, return + the empty string." + (if (or (looking-at browse-url-regexp) ; Already at start + (let ((eol (save-excursion (end-of-line) (point)))) + ;; Search forwards for the next URL or end of line in case + ;; we're in the middle of one. + (and (re-search-forward browse-url-regexp eol 'lim) + (goto-char (match-beginning 0))) + ;; Now back to where we started or earlier. + (re-search-backward browse-url-regexp nil t))) + (buffer-substring (match-beginning 0) (match-end 0)) + "")) ; No match + + ;; Todo: restrict to around or immediately before point. Expand bare + ;; hostname to URL. + + (defun browse-url-interactive-arg (&optional prompt) + "Read a URL from the minibuffer, optionally prompting with PROMPT. + Default to the URL at or before point. If bound to a mouse button, + set point to the position clicked. Return the result as a list for + use in `interactive'." + (let ((event (elt (this-command-keys) 0))) + (and (listp event) (mouse-set-point event))) + (list (read-string (or prompt "URL: ") (browse-url-url-at-point)))) + + (defun browse-url-at-point () + "Pass the URL at or before point to a WWW browser." + (interactive) + (funcall browse-url-browser-function (browse-url-at-point))) + + (defun browse-url-at-mouse (event) + "Ask a browser to load a URL clicked with the mouse. + The URL is the one around or before the position of the mouse click + but point is not changed. The URL is loaded using variable + `browse-url-browser-function'." + (interactive "e") + (save-excursion + (let ((posn (event-start event))) + (set-buffer (window-buffer (posn-window posn))) + (goto-char (posn-point posn)) + (let ((url (browse-url-url-at-point))) + (if (string-equal url "") + (error "No URL found")) + (funcall browse-url-browser-function url))))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Browse current buffer + + (defun browse-url-of-file (&optional file) + "Ask a WWW browser to display FILE. + Display the current buffer's file if FILE is nil or if called + interactively. Turn the filename into a URL by performing + replacements given in variable `browse-url-filename-alist'. Pass the + URL to a browser using variable `browse-url-browser-function' then run + `browse-url-of-file-hook'." + (interactive) + (setq file (or file + (buffer-file-name) + (and (boundp 'dired-directory) dired-directory))) + (let ((buf (get-file-buffer file))) + (if buf (save-excursion + (set-buffer buf) + (cond + ((not (buffer-modified-p))) + (browse-url-save-file (save-buffer)) + (t (message "%s modified since last save" file)))))) + (funcall browse-url-browser-function + (browse-url-file-url file)) + (run-hooks 'browse-url-of-file-hook)) + + (defun browse-url-file-url (file) + "Return the URL corresponding to FILE. + Uses variable `browse-url-filename-alist' to map filenames to URLs." + (let ((maps browse-url-filename-alist)) + (while maps + (let* ((map (car maps)) + (from-re (car map)) + (to-string (cdr map))) + (setq maps (cdr maps)) + (if (string-match from-re file) + (setq file (concat (substring file 0 (match-beginning 0)) + to-string + (substring file (match-end 0)))))))) + file) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Browser-specific functions + + (defun browse-url-netscape (url &optional new-window) + "Ask the Netscape WWW browser to load URL. + + Default to the URL around or before point. The strings in variable + `browse-url-netscape-arguments' are also passed to Netscape. + + If variable `browse-url-netscape-new-window-p' is non-nil, load the + document in a new Netscape window, otherwise use a random existing + one. If optional argument NEW-WINDOW (prefix argument if interactive) + is non-nil, the effect of browse-url-netscape-new-window-p is + reversed." + (interactive (append (browse-url-interactive-arg "Netscape URL: ") + (list (not (eq (null browse-url-netscape-new-window-p) + (null current-prefix-arg)))))) + (or (zerop + (apply 'call-process "netscape" nil nil nil + (append browse-url-netscape-arguments + (if new-window '("-noraise")) + (list "-remote" + (concat "openURL(" url + (if new-window ",new-window") + ")"))))) + (progn ; Netscape not running - start it + (message "Starting Netscape...") + (apply 'start-process "netscape" nil "netscape" + (append browse-url-netscape-arguments (list url)))))) + + (defun browse-url-netscape-reload () + "Ask Netscape to reload its current document." + (interactive) + (browse-url-netscape-command "reload")) + + (defun browse-url-netscape-command (command) + "Send a remote control command to Netscape." + (apply 'start-process "netscape" nil "netscape" + (append browse-url-netscape-arguments + (list "-remote" command)))) + + (defun browse-url-mosaic (url) + "Ask the XMosaic WWW browser to load URL. + Default to the URL around or before point." + (interactive (browse-url-interactive-arg "Mosaic URL: ")) + (let ((pidfile (expand-file-name "~/.mosaicpid")) + pid pidbuf) + (if (file-readable-p pidfile) + (save-excursion + (find-file pidfile) + (goto-char (point-min)) + (setq pid (read (current-buffer))) + (kill-buffer nil))) + (if (and pid (zerop (signal-process pid 0))) ; Mosaic running + (save-excursion + (find-file (format "/tmp/Mosaic.%d" pid)) + (erase-buffer) + (insert "goto\n" url "\n") + (save-buffer) + (kill-buffer nil) + ;; Send signal SIGUSR to Mosaic + (message "Signalling Mosaic...") + (signal-process pid browse-url-usr1-signal) + ;; Or you could try: + ;; (call-process "kill" nil 0 nil "-USR1" (int-to-string pid)) + ) + ;; Mosaic not running - start it + (message "Starting Mosaic...") + (apply 'start-process "xmosaic" nil "xmosaic" + (append browse-url-mosaic-arguments (list url)))))) + + (defun browse-url-iximosaic (url) + "Ask the IXIMosaic WWW browser to load URL. + Default to the URL around or before point." + (interactive (browse-url-interactive-arg "IXI Mosaic URL: ")) + (start-process "tellw3b" nil "tellw3b" + "-service WWW_BROWSER ixi_showurl " url)) + + (defun browse-url-w3 (url) + "Ask the w3 WWW browser to load URL. + Default to the URL around or before point." + (interactive (browse-url-interactive-arg "W3 URL: ")) + (w3-fetch url)) + + (provide 'browse-url) + + ;;; browse-url.el ends here *** pub/dgnus/lisp/custom.el Thu Jul 13 02:10:05 1995 --- dgnus/lisp/custom.el Fri Jul 14 16:58:35 1995 *************** *** 123,128 **** --- 123,140 ---- (and (symbolp x) (assq x global-face-data))) t))) + (defvar x-colors nil) + (defvar custom-button-face nil) + (defvar custom-modified-list nil) + (defvar custom-field-uninitialized-face nil) + (defvar custom-field-invalid-face nil) + (defvar custom-field-modified-face nil) + (defvar custom-field-face nil) + (defvar custom-button-properties nil) + (defvar custom-documentation-properties nil) + (defvar custom-mouse-face nil) + (defvar custom-field-active-face nil) + (or (fboundp 'modify-face) ;; Introduced in Emacs 19.29. (defun modify-face (face foreground background stipple *** pub/dgnus/lisp/gnus-cache.el Thu Jul 13 02:10:05 1995 --- dgnus/lisp/gnus-cache.el Fri Jul 14 16:38:05 1995 *************** *** 38,44 **** (defvar gnus-cache-buffer nil) - (defvar gnus-cache-removeable-articles nil) --- 38,43 ---- *************** *** 68,75 **** (setcar gnus-cache-buffer group) (let ((file (gnus-cache-file-name group ".overview"))) (and (file-exists-p file) ! (insert-file-contents file)))))) ! (setq gnus-cache-removeable-articles nil)) ;; Just save the overview buffer. --- 67,73 ---- (setcar gnus-cache-buffer group) (let ((file (gnus-cache-file-name group ".overview"))) (and (file-exists-p file) ! (insert-file-contents file))))))) ;; Just save the overview buffer. *************** *** 152,157 **** --- 150,156 ---- (let ((articles gnus-cache-removeable-articles) (cache-articles (gnus-cache-articles-in-group gnus-newsgroup-name)) article) + (gnus-cache-change-buffer gnus-newsgroup-name) (while articles (setq article (car articles) articles (cdr articles)) *************** *** 159,180 **** ;; The article was in the cache, so we see whether we are ;; supposed to remove it from the cache. (gnus-cache-possibly-remove-article ! gnus-newsgroup-name article ! (memq article gnus-newsgroup-marked) (memq article gnus-newsgroup-dormant) (or (memq article gnus-newsgroup-unreads) (memq article gnus-newsgroup-unselected))))))) (defun gnus-cache-possibly-remove-article ! (group article ticked dormant unread) ! (let ((file (gnus-cache-file-name group article))) (if (or (not (file-exists-p file)) (not (gnus-cache-member-of-class gnus-cache-remove-articles ticked dormant unread))) nil (save-excursion (delete-file file) - (gnus-cache-change-buffer group) (set-buffer (cdr gnus-cache-buffer)) (goto-char (point-min)) (if (or (looking-at (concat (int-to-string article) "\t")) --- 158,177 ---- ;; The article was in the cache, so we see whether we are ;; supposed to remove it from the cache. (gnus-cache-possibly-remove-article ! article (memq article gnus-newsgroup-marked) (memq article gnus-newsgroup-dormant) (or (memq article gnus-newsgroup-unreads) (memq article gnus-newsgroup-unselected))))))) (defun gnus-cache-possibly-remove-article ! (article ticked dormant unread) ! (let ((file (gnus-cache-file-name gnus-newsgroup-name article))) (if (or (not (file-exists-p file)) (not (gnus-cache-member-of-class gnus-cache-remove-articles ticked dormant unread))) nil (save-excursion (delete-file file) (set-buffer (cdr gnus-cache-buffer)) (goto-char (point-min)) (if (or (looking-at (concat (int-to-string article) "\t")) *** pub/dgnus/lisp/gnus-ems.el Thu Jul 13 02:10:06 1995 --- dgnus/lisp/gnus-ems.el Fri Jul 14 16:38:12 1995 *************** *** 77,85 **** (setq props (nthcdr 2 props))) (remove-text-properties start end ()))))) - (defvar gnus-header-face-alist - '(("" bold italic))) - (or (fboundp 'make-overlay) (fset 'make-overlay 'make-extent)) (or (fboundp 'overlay-put) (fset 'overlay-put 'set-extent-property)) (or (fboundp 'move-overlay) --- 77,82 ---- *************** *** 392,397 **** --- 389,404 ---- (setq pslist (cdr pslist))))))) + (defun gnus-article-push-button (event) + "Check text under the mouse pointer for a callback function. + If the text under the mouse pointer has a `gnus-callback' property, + call it with the value of the `gnus-data' text property." + (interactive "e") + (set-buffer (window-buffer (event-window event))) + (let* ((pos (event-closest-point event)) + (data (get-text-property pos 'gnus-data)) + (fun (get-text-property pos 'gnus-callback))) + (if fun (funcall fun data)))) ) *** pub/dgnus/lisp/gnus-kill.el Thu Jul 13 02:10:06 1995 --- dgnus/lisp/gnus-kill.el Sat Jul 15 20:25:18 1995 *************** *** 33,38 **** --- 33,41 ---- (defvar gnus-kill-expiry-days 7 "*Number of days before expiring unused kill file entries.") + (defvar gnus-kill-save-kill-file nil + "*If non-nil, will save kill files after processing them.") + (defvar gnus-winconf-kill-file nil) *************** *** 411,417 **** (save-excursion (set-buffer gnus-summary-buffer) (condition-case () (eval form) (error nil))))) ! (and (buffer-modified-p) (save-buffer)))) ;; Parse an rn killfile. (defun gnus-kill-parse-rn-kill-file () --- 414,423 ---- (save-excursion (set-buffer gnus-summary-buffer) (condition-case () (eval form) (error nil))))) ! (and (buffer-modified-p) ! gnus-kill-save-kill-file ! (save-buffer)) ! (set-buffer-modified-p nil))) ;; Parse an rn killfile. (defun gnus-kill-parse-rn-kill-file () *** pub/dgnus/lisp/gnus-msg.el Thu Jul 13 02:10:06 1995 --- dgnus/lisp/gnus-msg.el Sat Jul 15 19:38:55 1995 *************** *** 287,293 **** (if yank-articles (gnus-summary-goto-subject (car yank-articles))) (save-window-excursion (gnus-summary-select-article)) ! (let ((headers gnus-current-headers) (gnus-newsgroup-name gnus-newsgroup-name)) ;; Check Followup-To: poster. (set-buffer gnus-article-buffer) --- 287,293 ---- (if yank-articles (gnus-summary-goto-subject (car yank-articles))) (save-window-excursion (gnus-summary-select-article)) ! (let ((headers (gnus-get-header-by-number (gnus-summary-article-number))) (gnus-newsgroup-name gnus-newsgroup-name)) ;; Check Followup-To: poster. (set-buffer gnus-article-buffer) *** pub/dgnus/lisp/gnus-score.el Thu Jul 13 02:10:06 1995 --- dgnus/lisp/gnus-score.el Sat Jul 15 19:38:54 1995 *************** *** 170,176 **** (and (get-buffer "*Score Help*") (progn (kill-buffer "*Score Help*") ! (set-window-configuration gnus-score-help-winconf))) (or (setq entry (assq (downcase hchar) char-to-header)) (progn --- 170,177 ---- (and (get-buffer "*Score Help*") (progn (kill-buffer "*Score Help*") ! (and gnus-score-help-winconf ! (set-window-configuration gnus-score-help-winconf)))) (or (setq entry (assq (downcase hchar) char-to-header)) (progn *************** *** 207,213 **** (and (get-buffer "*Score Help*") (progn ! (set-window-configuration gnus-score-help-winconf) (kill-buffer "*Score Help*"))) (or (setq type (nth 1 (assq (downcase tchar) char-to-type))) --- 208,215 ---- (and (get-buffer "*Score Help*") (progn ! (and gnus-score-help-winconf ! (set-window-configuration gnus-score-help-winconf)) (kill-buffer "*Score Help*"))) (or (setq type (nth 1 (assq (downcase tchar) char-to-type))) *************** *** 239,245 **** (and (get-buffer "*Score Help*") (progn ! (set-window-configuration gnus-score-help-winconf) (kill-buffer "*Score Help*"))) (if mimic (message "%c %c %c" prefix hchar tchar pchar) --- 241,248 ---- (and (get-buffer "*Score Help*") (progn ! (and gnus-score-help-winconf ! (set-window-configuration gnus-score-help-winconf)) (kill-buffer "*Score Help*"))) (if mimic (message "%c %c %c" prefix hchar tchar pchar) *************** *** 1082,1087 **** --- 1085,1091 ---- ;; Insert the unique article headers in the buffer. (let ((gnus-score-index (nth 1 (assoc header gnus-header-index))) (current-score-file gnus-current-score-file) + (all-scores scores) ;; gnus-score-index is used as a free variable. alike last this art entries alist articles) *************** *** 1147,1153 **** (while arts (setq art (car arts) arts (cdr arts)) ! (gnus-score-add-followups (car art) score))))) (while (funcall search-func match nil t) (end-of-line) (setq found (setq arts (get-text-property (point) 'articles))) --- 1151,1158 ---- (while arts (setq art (car arts) arts (cdr arts)) ! (gnus-score-add-followups ! (car art) score all-scores))))) (while (funcall search-func match nil t) (end-of-line) (setq found (setq arts (get-text-property (point) 'articles))) *************** *** 1155,1161 **** (while arts (setq art (car arts) arts (cdr arts)) ! (gnus-score-add-followups (car art) score)))) ;; Update expire date (cond ((null date)) ;Permanent entry. (found ;Match, update date. --- 1160,1166 ---- (while arts (setq art (car arts) arts (cdr arts)) ! (gnus-score-add-followups (car art) score all-scores)))) ;; Update expire date (cond ((null date)) ;Permanent entry. (found ;Match, update date. *************** *** 1169,1189 **** ;; We change the score file back to the previous one. (gnus-score-load-file current-score-file))) ! (defun gnus-score-add-followups (header score) (save-excursion (set-buffer gnus-summary-buffer) ! (let ((id (header-id header)) ! dont) ;; Don't enter a score if there already is one. ! (while score ! (and (equal "references" (car (car score))) ! (or (null (nth 3 (car score))) ! (eq 's (nth 3 (car score)))) (progn ! (if (assoc id (car score)) ! (setq dont t)) ! (setq score nil))) ! (setq score (cdr score))) (or dont (gnus-summary-score-entry "references" id 's score (current-time-string) nil t))))) --- 1174,1195 ---- ;; We change the score file back to the previous one. (gnus-score-load-file current-score-file))) ! (defun gnus-score-add-followups (header score scores) (save-excursion (set-buffer gnus-summary-buffer) ! (let* ((id (header-id header)) ! (scores (car scores)) ! entry dont) ;; Don't enter a score if there already is one. ! (while scores ! (setq entry (car scores)) ! (and (equal "references" (car entry)) ! (or (null (nth 3 (car (cdr entry)))) ! (eq 's (nth 3 (car (cdr entry))))) (progn ! (if (assoc id entry) ! (setq dont t)))) ! (setq scores (cdr scores))) (or dont (gnus-summary-score-entry "references" id 's score (current-time-string) nil t))))) *** pub/dgnus/lisp/gnus-vis.el Thu Jul 13 02:10:06 1995 --- dgnus/lisp/gnus-vis.el Sat Jul 15 19:39:00 1995 *************** *** 45,72 **** (cons '(and (> score default) (or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark))) ! (custom-face-lookup "red" nil nil t nil nil)) (cons '(and (< score default) (or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark))) ! (custom-face-lookup "red" nil nil nil t nil)) (cons '(or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark)) ! (custom-face-lookup "red" nil nil nil nil nil)) (cons '(and (> score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "blue" nil nil t nil nil)) (cons '(and (< score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "blue" nil nil nil t nil)) (cons '(= mark gnus-ancient-mark) ! (custom-face-lookup "blue" nil nil nil nil nil)) (cons '(and (> score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "green" nil nil t nil nil)) (cons '(and (< score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "green" nil nil nil t nil)) (cons '(= mark gnus-unread-mark) ! (custom-face-lookup "green" nil nil nil nil nil)) (cons '(> score default) 'bold) (cons '(< score default) 'italic))) --- 45,72 ---- (cons '(and (> score default) (or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark))) ! (custom-face-lookup "pink" nil nil t nil nil)) (cons '(and (< score default) (or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark))) ! (custom-face-lookup "pink" nil nil nil t nil)) (cons '(or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark)) ! (custom-face-lookup "pink" nil nil nil nil nil)) (cons '(and (> score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "SkyBlue" nil nil t nil nil)) (cons '(and (< score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "SkyBlue" nil nil nil t nil)) (cons '(= mark gnus-ancient-mark) ! (custom-face-lookup "SkyBlue" nil nil nil nil nil)) (cons '(and (> score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "green" nil nil t nil nil)) (cons '(and (< score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "green" nil nil nil t nil)) (cons '(= mark gnus-unread-mark) ! (custom-face-lookup "green" nil nil nil nil nil)) (cons '(> score default) 'bold) (cons '(< score default) 'italic))) *************** *** 76,107 **** (cons '(and (> score default) (or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark))) ! (custom-face-lookup "firebrick" nil nil t nil nil)) (cons '(and (< score default) (or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark))) ! (custom-face-lookup "firebrick" nil nil nil t nil)) (cons '(or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark)) ! (custom-face-lookup "firebrick" nil nil nil nil nil)) (cons '(and (> score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "RoyalBlue" nil nil t nil nil)) (cons '(and (< score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "RoyalBlue" nil nil nil t nil)) (cons '(= mark gnus-ancient-mark) ! (custom-face-lookup "RoyalBlue" nil nil nil nil nil)) (cons '(and (> score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "DarkGreen" nil nil t nil nil)) (cons '(and (< score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "DarkGreen" nil nil nil t nil)) (cons '(= mark gnus-unread-mark) ! (custom-face-lookup "DarkGreen" nil nil nil nil nil)) (cons '(> score default) 'bold) (cons '(< score default) 'italic)))) ! "*Alist of `(FORM . FACE)'. Summary lines are highlighted with the FACE for the first FORM which evaluate to a non-nil value. --- 76,107 ---- (cons '(and (> score default) (or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark))) ! (custom-face-lookup "firebrick" nil nil t nil nil)) (cons '(and (< score default) (or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark))) ! (custom-face-lookup "firebrick" nil nil nil t nil)) (cons '(or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark)) ! (custom-face-lookup "firebrick" nil nil nil nil nil)) (cons '(and (> score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "RoyalBlue" nil nil t nil nil)) (cons '(and (< score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "RoyalBlue" nil nil nil t nil)) (cons '(= mark gnus-ancient-mark) ! (custom-face-lookup "RoyalBlue" nil nil nil nil nil)) (cons '(and (> score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "DarkGreen" nil nil t nil nil)) (cons '(and (< score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "DarkGreen" nil nil nil t nil)) (cons '(= mark gnus-unread-mark) ! (custom-face-lookup "DarkGreen" nil nil nil nil nil)) (cons '(> score default) 'bold) (cons '(< score default) 'italic)))) ! "*Alist of `(FORM . FACE)'. Summary lines are highlighted with the FACE for the first FORM which evaluate to a non-nil value. *************** *** 123,146 **** '(("" bold italic))) ((eq gnus-background-mode 'dark) (list (list "From" nil ! (custom-face-lookup "blue" nil nil t t nil)) ! (list "Subject" nil ! (custom-face-lookup "red" nil nil t t nil)) ! (list "Newsgroups:.*," nil ! (custom-face-lookup "yellow" nil nil t t nil)) ! (list "" ! (custom-face-lookup "cyan" nil nil t nil nil) ! (custom-face-lookup "green" nil nil nil t nil)))) (t (list (list "From" nil ! (custom-face-lookup "RoyalBlue" nil nil t t nil)) ! (list "Subject" nil ! (custom-face-lookup "firebrick" nil nil t t nil)) ! (list "Newsgroups:.*," nil ! (custom-face-lookup "dark orange" nil nil t t nil)) ! (list "" ! (custom-face-lookup "purple" nil nil t nil nil) ! (custom-face-lookup "DarkGreen" nil nil nil t nil))))) "Alist of headers and faces used for highlighting them. The entries in the list has the form `(REGEXP NAME CONTENT)', where REGEXP is a regular expression matching the beginning of the header, --- 123,146 ---- '(("" bold italic))) ((eq gnus-background-mode 'dark) (list (list "From" nil ! (custom-face-lookup "SkyeBlue" nil nil t t nil)) ! (list "Subject" nil ! (custom-face-lookup "pink" nil nil t t nil)) ! (list "Newsgroups:.*," nil ! (custom-face-lookup "yellow" nil nil t t nil)) ! (list "" ! (custom-face-lookup "cyan" nil nil t nil nil) ! (custom-face-lookup "green" nil nil nil t nil)))) (t (list (list "From" nil ! (custom-face-lookup "RoyalBlue" nil nil t t nil)) ! (list "Subject" nil ! (custom-face-lookup "firebrick" nil nil t t nil)) ! (list "Newsgroups:.*," nil ! (custom-face-lookup "dark orange" nil nil t t nil)) ! (list "" ! (custom-face-lookup "purple" nil nil t nil nil) ! (custom-face-lookup "DarkGreen" nil nil nil t nil))))) "Alist of headers and faces used for highlighting them. The entries in the list has the form `(REGEXP NAME CONTENT)', where REGEXP is a regular expression matching the beginning of the header, *************** *** 188,206 **** CALLBACK can also be a variable, in that case the value of that variable it the real callback function.") ! (defvar gnus-button-url (cond ((fboundp 'w3-fetch) ! 'w3-fetch) ! ((fboundp 'highlight-headers-follow-url-netscape) ! 'highlight-headers-follow-url-netscape) ! (t nil)) "Function to fetch URL. The function will be called with one argument, the URL to fetch. Useful values of this function are: w3-fetch: defined in the w3 emacs package by William M. Perry. ! highlight-headers-follow-url-netscape: ! from `highlight-headers.el' for loading NetScape 1.1.") --- 188,204 ---- CALLBACK can also be a variable, in that case the value of that variable it the real callback function.") ! (defvar gnus-button-url 'gnus-netscape-open-url "Function to fetch URL. The function will be called with one argument, the URL to fetch. Useful values of this function are: w3-fetch: defined in the w3 emacs package by William M. Perry. ! gnus-netscape-open-url: ! open url in existing netscape, start netscape if none found. ! gnus-netscape-start-url: ! start new netscape with url.") *************** *** 220,542 **** (defun gnus-group-make-menu-bar () (gnus-visual-turn-off-edit-menu 'group) ! ! (easy-menu-define ! gnus-group-reading-menu ! gnus-group-mode-map ! "" ! '("Group" ! ["Read" gnus-group-read-group t] ! ["Select" gnus-group-select-group t] ! ["Catch up" gnus-group-catchup-current t] ! ["Catch up all articles" gnus-group-catchup-current-all t] ! ["Check for new articles" gnus-group-get-new-news-this-group t] ! ["Toggle subscription" gnus-group-unsubscribe-current-group t] ! ["Kill" gnus-group-kill-group t] ! ["Yank" gnus-group-yank-group t] ! ["Describe" gnus-group-describe-group t] ! ["Fetch FAQ" gnus-group-fetch-faq t] ! ["Edit kill file" gnus-group-edit-local-kill t] ! ["Expire articles" gnus-group-expire-articles t] ! ["Set group level" gnus-group-set-current-level t] ! )) ! (easy-menu-define ! gnus-group-group-menu ! gnus-group-mode-map ! "" ! '("Groups" ! ("Listing" ! ["List subscribed groups" gnus-group-list-groups t] ! ["List all groups" gnus-group-list-all-groups t] ! ["List groups matching..." gnus-group-list-matching t] ! ["List killed groups" gnus-group-list-killed t] ! ["List zombie groups" gnus-group-list-zombies 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]) ! ("Mark" ! ["Mark group" gnus-group-mark-group t] ! ["Unmark group" gnus-group-unmark-group t] ! ["Mark region" gnus-group-mark-region t]) ! ("Subscribe" ! ["Subscribe to random 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 t]) ! ("Foreign groups" ! ["Make a foreign group" gnus-group-make-group t] ! ["Edit a group entry" gnus-group-edit-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]) ! ["Read a directory as a group" gnus-group-enter-directory t] ! ["Jump to group" gnus-group-jump-to-group t] ! ["Best unread group" gnus-group-best-unread-group t] ! )) ! ! (easy-menu-define ! gnus-group-post-menu ! gnus-group-mode-map ! "" ! '("Post" ! ["Send a mail" gnus-group-mail t] ! ["Post an article" gnus-group-post-news t] ! )) ! (easy-menu-define ! gnus-group-misc-menu ! gnus-group-mode-map ! "" ! '("Misc" ! ["Send a bug report" gnus-bug t] ! ["Check for new news" gnus-group-get-new-news 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 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] ! ["Sort group buffer" gnus-group-sort-groups t] ! )) ! ) ;; Server mode (defun gnus-server-make-menu-bar () (gnus-visual-turn-off-edit-menu 'server) ! ! (easy-menu-define ! gnus-server-menu ! gnus-server-mode-map ! "" ! '("Server" ! ["Add" gnus-server-add-server t] ! ["Browse" gnus-server-read-server t] ! ["List" gnus-server-list-servers t] ! ["Kill" gnus-server-kill-server t] ! ["Yank" gnus-server-yank-server t] ! ["Copy" gnus-server-copy-server t] ! ["Edit" gnus-server-edit-server t] ! ["Exit" gnus-server-exit t] ! ))) ;; Browse mode (defun gnus-browse-make-menu-bar () (gnus-visual-turn-off-edit-menu 'browse) ! ! (easy-menu-define ! gnus-browse-menu ! gnus-browse-mode-map ! "" ! '("Browse" ! ["Subscribe" gnus-browse-unsubscribe-current-group t] ! ["Read" gnus-group-read-group t] ! ["Exit" gnus-browse-exit t] ! ))) ;; Summary buffer (defun gnus-summary-make-menu-bar () (gnus-visual-turn-off-edit-menu 'summary) ! (easy-menu-define ! gnus-summary-mark-menu ! gnus-summary-mode-map ! "" ! '("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]) ! ("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]) ! ("Display" ! ["Remove lines marked as read" gnus-summary-remove-lines-marked-as-read t] ! ["Remove lines marked with..." gnus-summary-remove-lines-marked-with t] ! ["Show dormant articles" gnus-summary-show-all-dormant t] ! ["Hide dormant articles" gnus-summary-hide-all-dormant t] ! ["Show expunged articles" 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 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 sparse" gnus-uu-mark-sparse t] ! ["Mark thread" gnus-uu-mark-thread t] ! ) ! )) ! ! (easy-menu-define ! gnus-summary-move-menu ! gnus-summary-mode-map ! "" ! '("Move" ! ["Scroll article forwards" gnus-summary-next-page t] ! ["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 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] ! ["Go to subject number..." gnus-summary-goto-subject t] ! ["Go to the last article" gnus-summary-goto-last-article t] ! ["Pop article off history" gnus-summary-pop-article t] ! )) ! ! (easy-menu-define ! gnus-summary-article-menu ! gnus-summary-mode-map ! "" ! '("Article" ! ("Hide" ! ("Date" ! ["Local" gnus-article-date-local t] ! ["UT" gnus-article-date-local t] ! ["Lapsed" gnus-article-date-local t]) ! ["Headers" gnus-article-hide-headers t] ! ["Signature" gnus-article-hide-signature t] ! ["Citation" gnus-article-hide-citation t] ! ["Overstrike" gnus-article-treat-overstrike t] ! ["Word wrap" gnus-article-word-wrap t] ! ["CR" gnus-article-remove-cr t] ! ["Show X-Face" gnus-article-display-x-face t] ! ["Quoted-Printable" gnus-article-de-quoted-unreadable t]) ! ("Extract" ! ["Uudecode" gnus-uu-decode-uu t] ! ["Uudecode and save" gnus-uu-decode-uu-and-save t] ! ["Unshar" gnus-uu-decode-unshar t] ! ["Unshar and save" gnus-uu-decode-unshar-and-save t] ! ["Save" gnus-uu-decode-save t] ! ["Binhex" gnus-uu-decode-binhex t]) ! ["Enter digest buffer" gnus-summary-enter-digest-group t] ! ["Isearch article" gnus-summary-isearch-article t] ! ["Search all articles" gnus-summary-search-article-forward 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] ! ["Fetch article with id..." gnus-summary-refer-article t] ! ["Stop page breaking" gnus-summary-stop-page-breaking t] ! ["Rot 13" gnus-summary-caesar-message t] ! ["Redisplay" gnus-summary-show-article t] ! ["Toggle header" gnus-summary-toggle-header t] ! ["Toggle MIME" gnus-summary-toggle-mime t] ! ["Save" gnus-summary-save-article t] ! ["Save in mail format" gnus-summary-save-article-mail t] ! ["Pipe through a filter" gnus-summary-pipe-output t] ! ("Mail articles" ! ["Respool article" gnus-summary-respool-article t] ! ["Move article" gnus-summary-move-article t] ! ["Copy article" gnus-summary-copy-article t] ! ["Import file" gnus-summary-import-article t] ! ["Edit article" gnus-summary-edit-article t] ! ["Delete article" gnus-summary-delete-article t]) ! )) ! ! (easy-menu-define ! gnus-summary-thread-menu ! gnus-summary-mode-map ! "" ! '("Threads" ! ["Toggle threading" gnus-summary-toggle-threads t] ! ["Display hidden thread" gnus-summary-show-thread t] ! ["Hide thread" gnus-summary-hide-thread t] ! ["Go to next thread" gnus-summary-next-thread t] ! ["Go to previous thread" gnus-summary-prev-thread t] ! ["Go down thread" gnus-summary-down-thread t] ! ["Go up thread" gnus-summary-up-thread t] ! ["Mark thread as read" gnus-summary-kill-thread t] ! ["Lower thread score" gnus-summary-lower-thread t] ! ["Raise thread score" gnus-summary-raise-thread t] ! )) ! ! (easy-menu-define ! gnus-summary-misc-menu ! gnus-summary-mode-map ! "" ! '("Misc" ! ("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 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] ! ["Reselect group" gnus-summary-reselect-current-group t] ! ["Rescan group" gnus-summary-rescan-group t]) ! ["Fetch group FAQ" gnus-summary-fetch-faq t] ! ["Filter articles" gnus-summary-execute-command t] ! ["Toggle line truncation" gnus-summary-toggle-truncation t] ! ["Expire expirable articles" gnus-summary-expire-articles t] ! ["Describe group" gnus-summary-describe-group t] ! ["Edit local kill file" gnus-summary-edit-local-kill t] ! )) ! ! (easy-menu-define ! gnus-summary-post-menu ! gnus-summary-mode-map ! "" ! '("Post" ! ["Post an article" gnus-summary-post-news t] ! ["Followup" gnus-summary-followup t] ! ["Followup and yank" gnus-summary-followup-with-original t] ! ["Supersede article" gnus-summary-supersede-article t] ! ["Cancel article" gnus-summary-cancel-article t] ! ["Reply" gnus-summary-reply t] ! ["Reply and yank" gnus-summary-reply-with-original t] ! ["Mail forward" gnus-summary-mail-forward t] ! ["Post forward" gnus-summary-post-forward t] ! ["Digest and mail" gnus-uu-digest-mail-forward t] ! ["Digest and post" gnus-uu-digest-post-forward t] ! ["Send a mail" gnus-summary-mail-other-window t] ! ["Reply & followup" gnus-summary-followup-and-reply t] ! ["Reply & followup and yank" gnus-summary-followup-and-reply-with-original t] ! ["Uuencode and post" gnus-uu-post-news t] ! )) ! ! (easy-menu-define ! gnus-summary-kill-menu ! gnus-summary-mode-map ! "" ! (cons ! "Score" ! (nconc ! (list ! ["Enter score" gnus-summary-score-entry t]) ! (gnus-visual-score-map 'increase) ! (gnus-visual-score-map 'lower) ! '(["Current score" gnus-summary-current-score t] ! ["Set score" gnus-summary-set-score t] ! ("Score file" ["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] --- 218,545 ---- (defun gnus-group-make-menu-bar () (gnus-visual-turn-off-edit-menu 'group) ! (and ! (not (boundp 'gnus-group-reading-menu)) ;JMP ! (easy-menu-define ! gnus-group-reading-menu ! gnus-group-mode-map ! "" ! '("Group" ! ["Read" gnus-group-read-group t] ! ["Select" gnus-group-select-group t] ! ["Catch up" gnus-group-catchup-current t] ! ["Catch up all articles" gnus-group-catchup-current-all t] ! ["Check for new articles" gnus-group-get-new-news-this-group t] ! ["Toggle subscription" gnus-group-unsubscribe-current-group t] ! ["Kill" gnus-group-kill-group t] ! ["Yank" gnus-group-yank-group t] ! ["Describe" gnus-group-describe-group t] ! ["Fetch FAQ" gnus-group-fetch-faq t] ! ["Edit kill file" gnus-group-edit-local-kill t] ! ["Expire articles" gnus-group-expire-articles t] ! ["Set group level" gnus-group-set-current-level t] ! )) ! (easy-menu-define ! gnus-group-group-menu ! gnus-group-mode-map ! "" ! '("Groups" ! ("Listing" ! ["List subscribed groups" gnus-group-list-groups t] ! ["List all groups" gnus-group-list-all-groups t] ! ["List groups matching..." gnus-group-list-matching t] ! ["List killed groups" gnus-group-list-killed t] ! ["List zombie groups" gnus-group-list-zombies 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]) ! ("Mark" ! ["Mark group" gnus-group-mark-group t] ! ["Unmark group" gnus-group-unmark-group t] ! ["Mark region" gnus-group-mark-region t]) ! ("Subscribe" ! ["Subscribe to random 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 t]) ! ("Foreign groups" ! ["Make a foreign group" gnus-group-make-group t] ! ["Edit a group entry" gnus-group-edit-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]) ! ["Read a directory as a group" gnus-group-enter-directory t] ! ["Jump to group" gnus-group-jump-to-group t] ! ["Best unread group" gnus-group-best-unread-group t] ! )) ! ! (easy-menu-define ! gnus-group-post-menu ! gnus-group-mode-map ! "" ! '("Post" ! ["Send a mail" gnus-group-mail t] ! ["Post an article" gnus-group-post-news t] ! )) ! (easy-menu-define ! gnus-group-misc-menu ! gnus-group-mode-map ! "" ! '("Misc" ! ["Send a bug report" gnus-bug t] ! ["Check for new news" gnus-group-get-new-news 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 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] ! ["Sort group buffer" gnus-group-sort-groups t] ! )) ! ) ;JMP ) ;; Server mode (defun gnus-server-make-menu-bar () (gnus-visual-turn-off-edit-menu 'server) ! (and ! (not (boundp 'gnus-server-menu)) ;JMP ! (easy-menu-define ! gnus-server-menu ! gnus-server-mode-map ! "" ! '("Server" ! ["Add" gnus-server-add-server t] ! ["Browse" gnus-server-read-server t] ! ["List" gnus-server-list-servers t] ! ["Kill" gnus-server-kill-server t] ! ["Yank" gnus-server-yank-server t] ! ["Copy" gnus-server-copy-server t] ! ["Edit" gnus-server-edit-server t] ! ["Exit" gnus-server-exit t] ! )))) ;; Browse mode (defun gnus-browse-make-menu-bar () (gnus-visual-turn-off-edit-menu 'browse) ! (and ! (not (boundp 'gnus-browse-menu)) ;JMP ! (easy-menu-define ! gnus-browse-menu ! gnus-browse-mode-map ! "" ! '("Browse" ! ["Subscribe" gnus-browse-unsubscribe-current-group t] ! ["Read" gnus-group-read-group t] ! ["Exit" gnus-browse-exit t] ! )))) ;; Summary buffer (defun gnus-summary-make-menu-bar () (gnus-visual-turn-off-edit-menu 'summary) ! (and ! (not (boundp 'gnus-summary-mark-menu)) ;JMP ! (easy-menu-define ! gnus-summary-mark-menu ! gnus-summary-mode-map ! "" ! '("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]) ! ("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]) ! ("Display" ! ["Remove lines marked as read" gnus-summary-remove-lines-marked-as-read t] ! ["Remove lines marked with..." gnus-summary-remove-lines-marked-with t] ! ["Show dormant articles" gnus-summary-show-all-dormant t] ! ["Hide dormant articles" gnus-summary-hide-all-dormant t] ! ["Show expunged articles" 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 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 sparse" gnus-uu-mark-sparse t] ! ["Mark thread" gnus-uu-mark-thread t] ! ) ! )) ! ! (easy-menu-define ! gnus-summary-move-menu ! gnus-summary-mode-map ! "" ! '("Move" ! ["Scroll article forwards" gnus-summary-next-page t] ! ["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 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] ! ["Go to subject number..." gnus-summary-goto-subject t] ! ["Go to the last article" gnus-summary-goto-last-article t] ! ["Pop article off history" gnus-summary-pop-article t] ! )) ! ! (easy-menu-define ! gnus-summary-article-menu ! gnus-summary-mode-map ! "" ! '("Article" ! ("Hide" ! ("Date" ! ["Local" gnus-article-date-local t] ! ["UT" gnus-article-date-local t] ! ["Lapsed" gnus-article-date-local t]) ! ["Headers" gnus-article-hide-headers t] ! ["Signature" gnus-article-hide-signature t] ! ["Citation" gnus-article-hide-citation t] ! ["Overstrike" gnus-article-treat-overstrike t] ! ["Word wrap" gnus-article-word-wrap t] ! ["CR" gnus-article-remove-cr t] ! ["Show X-Face" gnus-article-display-x-face t] ! ["Quoted-Printable" gnus-article-de-quoted-unreadable t]) ! ("Extract" ! ["Uudecode" gnus-uu-decode-uu t] ! ["Uudecode and save" gnus-uu-decode-uu-and-save t] ! ["Unshar" gnus-uu-decode-unshar t] ! ["Unshar and save" gnus-uu-decode-unshar-and-save t] ! ["Save" gnus-uu-decode-save t] ! ["Binhex" gnus-uu-decode-binhex t]) ! ["Enter digest buffer" gnus-summary-enter-digest-group t] ! ["Isearch article" gnus-summary-isearch-article t] ! ["Search all articles" gnus-summary-search-article-forward 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] ! ["Fetch article with id..." gnus-summary-refer-article t] ! ["Stop page breaking" gnus-summary-stop-page-breaking t] ! ["Rot 13" gnus-summary-caesar-message t] ! ["Redisplay" gnus-summary-show-article t] ! ["Toggle header" gnus-summary-toggle-header t] ! ["Toggle MIME" gnus-summary-toggle-mime t] ! ["Save" gnus-summary-save-article t] ! ["Save in mail format" gnus-summary-save-article-mail t] ! ["Pipe through a filter" gnus-summary-pipe-output t] ! ("Mail articles" ! ["Respool article" gnus-summary-respool-article t] ! ["Move article" gnus-summary-move-article t] ! ["Copy article" gnus-summary-copy-article t] ! ["Import file" gnus-summary-import-article t] ! ["Edit article" gnus-summary-edit-article t] ! ["Delete article" gnus-summary-delete-article t]) ! )) ! ! (easy-menu-define ! gnus-summary-thread-menu ! gnus-summary-mode-map ! "" ! '("Threads" ! ["Toggle threading" gnus-summary-toggle-threads t] ! ["Display hidden thread" gnus-summary-show-thread t] ! ["Hide thread" gnus-summary-hide-thread t] ! ["Go to next thread" gnus-summary-next-thread t] ! ["Go to previous thread" gnus-summary-prev-thread t] ! ["Go down thread" gnus-summary-down-thread t] ! ["Go up thread" gnus-summary-up-thread t] ! ["Mark thread as read" gnus-summary-kill-thread t] ! ["Lower thread score" gnus-summary-lower-thread t] ! ["Raise thread score" gnus-summary-raise-thread t] ! )) ! ! (easy-menu-define ! gnus-summary-misc-menu ! gnus-summary-mode-map ! "" ! '("Misc" ! ("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 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] ! ["Reselect group" gnus-summary-reselect-current-group t] ! ["Rescan group" gnus-summary-rescan-group t]) ! ["Fetch group FAQ" gnus-summary-fetch-faq t] ! ["Filter articles" gnus-summary-execute-command t] ! ["Toggle line truncation" gnus-summary-toggle-truncation t] ! ["Expire expirable articles" gnus-summary-expire-articles t] ! ["Describe group" gnus-summary-describe-group t] ! ["Edit local kill file" gnus-summary-edit-local-kill t] ! )) ! ! (easy-menu-define ! gnus-summary-post-menu ! gnus-summary-mode-map ! "" ! '("Post" ! ["Post an article" gnus-summary-post-news t] ! ["Followup" gnus-summary-followup t] ! ["Followup and yank" gnus-summary-followup-with-original t] ! ["Supersede article" gnus-summary-supersede-article t] ! ["Cancel article" gnus-summary-cancel-article t] ! ["Reply" gnus-summary-reply t] ! ["Reply and yank" gnus-summary-reply-with-original t] ! ["Mail forward" gnus-summary-mail-forward t] ! ["Post forward" gnus-summary-post-forward t] ! ["Digest and mail" gnus-uu-digest-mail-forward t] ! ["Digest and post" gnus-uu-digest-post-forward t] ! ["Send a mail" gnus-summary-mail-other-window t] ! ["Reply & followup" gnus-summary-followup-and-reply t] ! ["Reply & followup and yank" gnus-summary-followup-and-reply-with-original t] ! ["Uuencode and post" gnus-uu-post-news t] ! )) ! ! (easy-menu-define ! gnus-summary-kill-menu ! gnus-summary-mode-map ! "" ! (cons ! "Score" ! (nconc ! (list ! ["Enter score" gnus-summary-score-entry t]) ! (gnus-visual-score-map 'increase) ! (gnus-visual-score-map 'lower) ! '(["Current score" gnus-summary-current-score t] ! ["Set score" gnus-summary-set-score t] ! ("Score file" ["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] *************** *** 544,551 **** ["Edit current score file" gnus-score-edit-alist t] ["Edit score file" gnus-score-edit-file t] ["Trace score" gnus-score-find-trace t]) ! )))) ! ) (defun gnus-visual-score-map (type) --- 547,554 ---- ["Edit current score file" gnus-score-edit-alist t] ["Edit score file" gnus-score-edit-file t] ["Trace score" gnus-score-find-trace t]) ! )))) ! ) ; not done already - JMP ) (defun gnus-visual-score-map (type) *************** *** 627,660 **** ;; Article buffer (defun gnus-article-make-menu-bar () (gnus-visual-turn-off-edit-menu 'summary) ! ! (easy-menu-define ! gnus-article-article-menu ! gnus-article-mode-map ! "" ! '("Article" ! ["Scroll forwards" gnus-article-next-page t] ! ["Scroll backwards" gnus-article-prev-page t] ! ["Show summary" gnus-article-show-summary t] ! ["Fetch Message-ID at point" gnus-article-refer-article t] ! ["Mail to address at point" gnus-article-mail t] ! ["Mail to address at point and include original" ! gnus-article-mail-with-original t] ! )) ! ! (easy-menu-define ! gnus-article-treatment-menu ! gnus-article-mode-map ! "" ! '("Treatment" ! ["Hide headers" gnus-article-hide-headers t] ! ["Hide signature" gnus-article-hide-signature t] ! ["Hide citation" gnus-article-hide-citation t] ! ["Treat overstrike" gnus-article-treat-overstrike t] ! ["Remove carriage return" gnus-article-remove-cr t] ! ["Remove quoted-unreadable" gnus-article-de-quoted-unreadable t] ! )) ! ) ;;; ;;; summary highlights --- 630,664 ---- ;; Article buffer (defun gnus-article-make-menu-bar () (gnus-visual-turn-off-edit-menu 'summary) ! (and ! (not (boundp 'gnus-article-article-menu)) ;JMP ! (easy-menu-define ! gnus-article-article-menu ! gnus-article-mode-map ! "" ! '("Article" ! ["Scroll forwards" gnus-article-next-page t] ! ["Scroll backwards" gnus-article-prev-page t] ! ["Show summary" gnus-article-show-summary t] ! ["Fetch Message-ID at point" gnus-article-refer-article t] ! ["Mail to address at point" gnus-article-mail t] ! ["Mail to address at point and include original" ! gnus-article-mail-with-original t] ! )) ! ! (easy-menu-define ! gnus-article-treatment-menu ! gnus-article-mode-map ! "" ! '("Treatment" ! ["Hide headers" gnus-article-hide-headers t] ! ["Hide signature" gnus-article-hide-signature t] ! ["Hide citation" gnus-article-hide-citation t] ! ["Treat overstrike" gnus-article-treat-overstrike t] ! ["Remove carriage return" gnus-article-remove-cr t] ! ["Remove quoted-unreadable" gnus-article-de-quoted-unreadable t] ! )) ! )) ;;; ;;; summary highlights *************** *** 1066,1083 **** (gnus-article-add-button start end 'gnus-button-push (set-marker (make-marker) from))))))))) ;;; External functions: (defun gnus-article-add-button (from to fun &optional data) "Create a button between FROM and TO with callback FUN and data DATA." (add-text-properties from to ! (append (if gnus-article-button-face ! (list 'face gnus-article-button-face)) ! (if gnus-article-mouse-face ! (list 'mouse-face gnus-article-mouse-face)) (list 'gnus-callback fun) ! (if data (list 'gnus-data data))))) ;;; Internal functions: --- 1070,1102 ---- (gnus-article-add-button start end 'gnus-button-push (set-marker (make-marker) from))))))))) + (defun gnus-netscape-open-url (url) + "Open URL in netscape, or start new scape with URL." + (let ((process (start-process (concat "netscape " url) + nil + "netscape" + "-remote" + (concat "openUrl(" url ")'")))) + (set-process-sentinel process + `(lambda (process change) + (or (eq (process-exit-status process) 0) + (gnus-netscape-start-url ,url)))))) + + (defun gnus-netscape-start-url (url) + "Start netscape with URL." + (shell-command (concat "netscape " url "&"))) ;;; External functions: (defun gnus-article-add-button (from to fun &optional data) "Create a button between FROM and TO with callback FUN and data DATA." + (and gnus-article-button-face + (overlay-put (make-overlay from to) 'face gnus-article-button-face)) (add-text-properties from to ! (append (and gnus-article-mouse-face ! (list 'mouse-face gnus-article-mouse-face)) (list 'gnus-callback fun) ! (and data (list 'gnus-data data))))) ;;; Internal functions: *** pub/dgnus/lisp/gnus-vm.el Thu Jul 13 02:10:07 1995 --- dgnus/lisp/gnus-vm.el Sat Jul 15 19:38:54 1995 *************** *** 118,124 **** (if gnus-use-full-window (pop-to-buffer gnus-article-buffer) (switch-to-buffer gnus-article-buffer))) ! (set-buffer gnus-article-buffer) (save-excursion (save-restriction (widen) --- 118,125 ---- (if gnus-use-full-window (pop-to-buffer gnus-article-buffer) (switch-to-buffer gnus-article-buffer))) ! (gnus-copy-article-buffer) ! (set-buffer gnus-article-copy) (save-excursion (save-restriction (widen) *************** *** 147,157 **** Optional argument YANK means yank original article. The command \\[vm-yank-message] yank the original message into current buffer." (let ((gnus-buffer (current-buffer))) ! (set-buffer gnus-article-buffer) (save-excursion (save-restriction (widen) ! (let ((vm-folder (gnus-vm-make-folder gnus-article-buffer))) (vm-reply 1) (gnus-vm-init-reply-buffer gnus-buffer) (setq gnus-buffer (current-buffer)) --- 148,159 ---- Optional argument YANK means yank original article. The command \\[vm-yank-message] yank the original message into current buffer." (let ((gnus-buffer (current-buffer))) ! (gnus-copy-article-buffer) ! (set-buffer gnus-article-copy) (save-excursion (save-restriction (widen) ! (let ((vm-folder (gnus-vm-make-folder gnus-article-copy))) (vm-reply 1) (gnus-vm-init-reply-buffer gnus-buffer) (setq gnus-buffer (current-buffer)) *** pub/dgnus/lisp/gnus.el Thu Jul 13 02:10:08 1995 --- dgnus/lisp/gnus.el Sat Jul 15 20:16:34 1995 *************** *** 1340,1346 **** (defconst gnus-maintainer "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)" "The mail address of the Gnus maintainers.") ! (defconst gnus-version "(ding) Gnus v0.95" "Version number for this version of Gnus.") (defvar gnus-info-nodes --- 1340,1346 ---- (defconst gnus-maintainer "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)" "The mail address of the Gnus maintainers.") ! (defconst gnus-version "(ding) Gnus v0.96" "Version number for this version of Gnus.") (defvar gnus-info-nodes *************** *** 1507,1512 **** --- 1507,1514 ---- (defvar rmail-default-file (expand-file-name "~/XMBOX")) (defvar rmail-default-rmail-file (expand-file-name "~/XNEWS")) + (defvar gnus-cache-removeable-articles nil) + (defconst gnus-summary-local-variables '(gnus-newsgroup-name gnus-newsgroup-begin gnus-newsgroup-end *************** *** 1526,1532 **** gnus-score-alist gnus-current-score-file gnus-summary-expunge-below gnus-summary-mark-below gnus-newsgroup-active gnus-scores-exclude-files gnus-newsgroup-history gnus-newsgroup-ancient ! (gnus-newsgroup-adaptive . gnus-use-adaptive-scoring)) "Variables that are buffer-local to the summary buffers.") (defconst gnus-bug-message --- 1528,1535 ---- gnus-score-alist gnus-current-score-file gnus-summary-expunge-below gnus-summary-mark-below gnus-newsgroup-active gnus-scores-exclude-files gnus-newsgroup-history gnus-newsgroup-ancient ! (gnus-newsgroup-adaptive . gnus-use-adaptive-scoring) ! gnus-cache-removeable-articles) "Variables that are buffer-local to the summary buffers.") (defconst gnus-bug-message *************** *** 3496,3501 **** --- 3499,3505 ---- (process-marked (if (member qualified-group gnus-group-marked) gnus-process-mark ? )) (buffer-read-only nil) + header ; passed as parameter to user-funcs. b) (beginning-of-line) (setq b (point)) *************** *** 3598,3606 **** group exists. If FIRST-TOO, the current line is also eligible as a target." (let ((way (if backward -1 1)) ! (low 10) (beg (point)) ! pos found) (if (and backward (progn (beginning-of-line)) (bobp)) nil (or first-too (forward-line way)) --- 3602,3610 ---- group exists. If FIRST-TOO, the current line is also eligible as a target." (let ((way (if backward -1 1)) ! (low gnus-level-killed) (beg (point)) ! pos found lev) (if (and backward (progn (beginning-of-line)) (bobp)) nil (or first-too (forward-line way)) *************** *** 3613,3639 **** (let ((unread (get-text-property (point) 'gnus-unread))) (or (eq unread t) (and unread (> unread 0)))) ! (let ((lev (get-text-property ! (point) 'gnus-level))) ! (and lev (<= (get-text-property ! (point) 'gnus-level) ! gnus-level-subscribed))))) (or (not level) ! (let ((lev (get-text-property (point) ! 'gnus-level))) ! (if (and lev (= lev level)) ! t ! (if (and (< lev low) ! (< level low)) ! (progn ! (setq low lev) ! (setq pos (point)))) ! nil)))))) (zerop (forward-line way))))) (if found (progn (gnus-group-position-cursor) t) ! (if pos (goto-char pos) (goto-char beg)) ! nil))) ;;; Gnus group mode commands --- 3617,3640 ---- (let ((unread (get-text-property (point) 'gnus-unread))) (or (eq unread t) (and unread (> unread 0)))) ! (setq lev (get-text-property (point) ! 'gnus-level)) ! (<= lev gnus-level-subscribed))) (or (not level) ! (and (setq lev (get-text-property (point) ! 'gnus-level)) ! (or (= lev level) ! (and (< lev low) ! (< level lev) ! (progn ! (setq low lev) ! (setq pos (point)) ! nil)))))))) (zerop (forward-line way))))) (if found (progn (gnus-group-position-cursor) t) ! (goto-char (or pos beg)) ! (and pos t)))) ;;; Gnus group mode commands *************** *** 4474,4496 **** specify which levels you are interested in re-scanning." (interactive "P") (run-hooks 'gnus-get-new-news-hook) ! (let ((level arg)) ! (if gnus-group-use-permanent-levels ! (if level ! (setq gnus-group-default-list-level level) ! (setq level (or gnus-group-default-list-level ! gnus-level-subscribed)))) ! (if (and gnus-read-active-file (not level)) ! (progn ! (gnus-read-active-file) ! (gnus-get-unread-articles (or level (1+ gnus-level-subscribed)))) ! (let ((gnus-read-active-file nil) ! (gnus-have-read-active-file (not arg))) ! (gnus-get-unread-articles (or level (1+ gnus-level-subscribed))))) ! (gnus-group-list-groups (or (and gnus-group-use-permanent-levels level) ! gnus-group-default-list-level ! gnus-level-subscribed) ! gnus-have-all-newsgroups))) (defun gnus-group-get-new-news-this-group (n) "Check for newly arrived news in the current group (and the N-1 next groups). --- 4475,4496 ---- specify which levels you are interested in re-scanning." (interactive "P") (run-hooks 'gnus-get-new-news-hook) ! (if gnus-group-use-permanent-levels ! (setq arg ! (setq gnus-group-default-list-level ! (or arg gnus-group-default-list-level ! gnus-level-subscribed)))) ! (if (and gnus-read-active-file (not arg)) ! (progn ! (gnus-read-active-file) ! (gnus-get-unread-articles (or arg (1+ gnus-level-subscribed)))) ! (let ((gnus-read-active-file nil) ! (gnus-have-read-active-file (not arg))) ! (gnus-get-unread-articles (or arg (1+ gnus-level-subscribed))))) ! (gnus-group-list-groups (or (and gnus-group-use-permanent-levels arg) ! gnus-group-default-list-level ! gnus-level-subscribed) ! gnus-have-all-newsgroups)) (defun gnus-group-get-new-news-this-group (n) "Check for newly arrived news in the current group (and the N-1 next groups). *************** *** 8035,8042 **** (let ((buffer-read-only nil)) (and tmp-point (set-window-start (get-buffer-window (current-buffer)) ! tmp-point)))) ! (kill-buffer tmp-buf)))))))) (defun gnus-summary-enter-digest-group () "Enter a digest group based on the current article." --- 8035,8041 ---- (let ((buffer-read-only nil)) (and tmp-point (set-window-start (get-buffer-window (current-buffer)) ! tmp-point))))))))))) (defun gnus-summary-enter-digest-group () "Enter a digest group based on the current article." *************** *** 8541,8546 **** --- 8540,8546 ---- (gnus-check-backend-function 'request-expire-articles gnus-newsgroup-name)) (let ((expirable gnus-newsgroup-expirable)) + (gnus-message 6 "Expiring articles...") ;; The list of articles that weren't expired is returned. (setq gnus-newsgroup-expirable (gnus-request-expire-articles gnus-newsgroup-expirable *************** *** 8550,8556 **** (while expirable (or (memq (car expirable) gnus-newsgroup-expirable) (gnus-summary-mark-as-read (car expirable) gnus-canceled-mark)) ! (setq expirable (cdr expirable)))))) (defun gnus-summary-expire-articles-now () "Expunge all expirable articles in the current group. --- 8550,8558 ---- (while expirable (or (memq (car expirable) gnus-newsgroup-expirable) (gnus-summary-mark-as-read (car expirable) gnus-canceled-mark)) ! (setq expirable (cdr expirable))) ! (gnus-message 6 "Expiring articles...done")))) ! (defun gnus-summary-expire-articles-now () "Expunge all expirable articles in the current group. *************** *** 10031,10037 **** ;; Duplicate almost all summary keystrokes in the article mode map. (let ((commands (list ! " " "\177" "n" "p" "N" "P" "\M-\C-n" "\M-\C-p" "\M-n" "\M-p" "." "," "\M-s" "\M-r" "<" ">" "j" "^" "\M-^" "u" "!" "U" "d" "D" "E" "\M-u" "\M-U" "k" "\C-k" "\M-\C-k" "\M-\C-l" "e" "#" "\M-#" "\M-\C-t" "\M-\C-s" "\M-\C-h" --- 10033,10039 ---- ;; Duplicate almost all summary keystrokes in the article mode map. (let ((commands (list ! " " "\177" "p" "N" "P" "\M-\C-n" "\M-\C-p" "\M-n" "\M-p" "." "," "\M-s" "\M-r" "<" ">" "j" "^" "\M-^" "u" "!" "U" "d" "D" "E" "\M-u" "\M-U" "k" "\C-k" "\M-\C-k" "\M-\C-l" "e" "#" "\M-#" "\M-\C-t" "\M-\C-s" "\M-\C-h" *************** *** 10062,10068 **** (let ((commands (list "q" "Q" "c" "r" "R" "\C-c\C-f" "m" "a" "f" "F" ;; "Zc" "ZC" "ZE" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP" ! "="))) (while commands (define-key gnus-article-mode-map (car commands) 'gnus-article-summary-command-nosave) --- 10064,10070 ---- (let ((commands (list "q" "Q" "c" "r" "R" "\C-c\C-f" "m" "a" "f" "F" ;; "Zc" "ZC" "ZE" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP" ! "=" "n"))) (while commands (define-key gnus-article-mode-map (car commands) 'gnus-article-summary-command-nosave) *************** *** 10836,10842 **** "Execute the last keystroke in the summary buffer." (interactive) (let (func) ! (switch-to-buffer gnus-summary-buffer 'norecord) (setq func (lookup-key (current-local-map) (this-command-keys))) (call-interactively func))) --- 10838,10844 ---- "Execute the last keystroke in the summary buffer." (interactive) (let (func) ! (pop-to-buffer gnus-summary-buffer 'norecord) (setq func (lookup-key (current-local-map) (this-command-keys))) (call-interactively func))) *************** *** 12783,12790 **** (kill-buffer (current-buffer))))) (defun gnus-read-all-descriptions-files () ! (let ((methods (nconc (list gnus-select-method) ! gnus-secondary-select-methods))) (while methods (gnus-read-descriptions-file (car methods)) (setq methods (cdr methods))) --- 12785,12791 ---- (kill-buffer (current-buffer))))) (defun gnus-read-all-descriptions-files () ! (let ((methods (cons gnus-select-method gnus-secondary-select-methods))) (while methods (gnus-read-descriptions-file (car methods)) (setq methods (cdr methods))) *** pub/dgnus/lisp/nnbabyl.el Thu Jul 13 02:10:08 1995 --- dgnus/lisp/nnbabyl.el Fri Jul 14 17:22:40 1995 *************** *** 259,265 **** days))) (progn (and gnus-verbose-backends ! (message "Deleting: %s" (car articles))) (nnbabyl-delete-mail)) (setq rest (cons (car articles) rest)))) (setq articles (cdr articles))) --- 259,265 ---- days))) (progn (and gnus-verbose-backends ! (message "Deleting article %s..." (car articles))) (nnbabyl-delete-mail)) (setq rest (cons (car articles) rest)))) (setq articles (cdr articles))) *** pub/dgnus/lisp/nnfolder.el Thu Jul 13 02:10:08 1995 --- dgnus/lisp/nnfolder.el Sat Jul 15 18:16:09 1995 *************** *** 66,72 **** "Mail newsgroups description file.") (defvar nnfolder-get-new-mail t ! "If non-nil, nnml will check the incoming mail file and split the mail.") (defvar nnfolder-prepare-save-mail-hook nil "Hook run narrowed to an article before saving.") --- 66,72 ---- "Mail newsgroups description file.") (defvar nnfolder-get-new-mail t ! "If non-nil, nnfolder will check the incoming mail file and split the mail.") (defvar nnfolder-prepare-save-mail-hook nil "Hook run narrowed to an article before saving.") *************** *** 84,89 **** --- 84,90 ---- (defvar nnfolder-status-string "") (defvar nnfolder-group-alist nil) (defvar nnfolder-buffer-alist nil) + (defvar nnfolder-active-timestamp nil) (defmacro nnfolder-article-string (article) (` (concat "\n" nnfolder-article-marker (int-to-string (, article)) " "))) *************** *** 102,108 **** '(nnfolder-current-buffer nil) '(nnfolder-status-string "") '(nnfolder-group-alist nil) ! '(nnfolder-buffer-alist nil))) --- 103,110 ---- '(nnfolder-current-buffer nil) '(nnfolder-status-string "") '(nnfolder-group-alist nil) ! '(nnfolder-buffer-alist nil) ! '(nnfolder-active-timestamp nil))) *************** *** 220,238 **** (if dont-check t (nnfolder-get-new-mail group)) ! (let* ((active (assoc group nnfolder-group-alist)) ! (group (car active)) ! (range (car (cdr active))) ! (minactive (car range)) ! (maxactive (cdr range))) ! ;; I've been getting stray 211 lines in my nnfolder active ! ;; file. So, let's make sure that doesn't happen. -SLB ! (set-buffer nntp-server-buffer) ! (erase-buffer) ! (insert (format "211 %d %d %d %s\n" ! (1+ (- maxactive minactive)) ! minactive maxactive group)) ! t))))) ;; Don't close the buffer if we're not shutting down the server. This way, ;; we can keep the buffer in the group buffer cache, and not have to grovel --- 222,251 ---- (if dont-check t (nnfolder-get-new-mail group)) ! (let ((timestamp (nth 5 (file-attributes nnfolder-active-file)))) ! ;; Make sure we get the latest active file ! (if (or (not nnfolder-active-timestamp) ! (> (nth 0 timestamp) (nth 0 nnfolder-active-timestamp)) ! (> (nth 1 timestamp) (nth 1 nnfolder-active-timestamp))) ! (progn ! (setq nnfolder-active-timestamp timestamp) ! (nnfolder-request-list) ! (setq nnfolder-group-alist (nnmail-get-active)))) ! (let* ((active (assoc group nnfolder-group-alist)) ! (group (car active)) ! (range (car (cdr active))) ! (minactive (car range)) ! (maxactive (cdr range))) ! ;; I've been getting stray 211 lines in my nnfolder active ! ;; file. So, let's make sure that doesn't happen. -SLB ! (set-buffer nntp-server-buffer) ! (erase-buffer) ! (if (not active) ! () ! (insert (format "211 %d %d %d %s\n" ! (1+ (- maxactive minactive)) ! minactive maxactive group)) ! t))))))) ;; Don't close the buffer if we're not shutting down the server. This way, ;; we can keep the buffer in the group buffer cache, and not have to grovel *************** *** 267,287 **** (nnfolder-request-list) (setq nnfolder-group-alist (nnmail-get-active)) (or (assoc group nnfolder-group-alist) ! (progn (setq nnfolder-group-alist ! (cons (list group (cons 0 0)) nnfolder-group-alist)) (nnmail-save-active nnfolder-group-alist nnfolder-active-file))) t) (defun nnfolder-request-list (&optional server) (if server (nnfolder-get-new-mail)) (save-excursion ! (or nnfolder-group-alist ! (nnmail-find-file nnfolder-active-file) ! (progn ! (setq nnfolder-group-alist (nnmail-get-active)) ! (nnmail-save-active nnfolder-group-alist nnfolder-active-file) ! (nnmail-find-file nnfolder-active-file))))) (defun nnfolder-request-newgroups (date &optional server) (nnfolder-request-list server)) --- 280,304 ---- (nnfolder-request-list) (setq nnfolder-group-alist (nnmail-get-active)) (or (assoc group nnfolder-group-alist) ! (let (active) (setq nnfolder-group-alist ! (cons (list group (setq active (cons 0 0))) nnfolder-group-alist)) ! (nnfolder-possibly-change-group group) (nnmail-save-active nnfolder-group-alist nnfolder-active-file))) t) (defun nnfolder-request-list (&optional server) (if server (nnfolder-get-new-mail)) (save-excursion ! (nnmail-find-file nnfolder-active-file) ! (setq nnfolder-group-alist (nnmail-get-active)))) ! ! ;; (or nnfolder-group-alist ! ;; (nnmail-find-file nnfolder-active-file) ! ;; (progn ! ;; (setq nnfolder-group-alist (nnmail-get-active)) ! ;; (nnmail-save-active nnfolder-group-alist nnfolder-active-file) ! ;; (nnmail-find-file nnfolder-active-file))))) (defun nnfolder-request-newgroups (date &optional server) (nnfolder-request-list server)) *************** *** 304,310 **** (is-old t) rest) (nnfolder-request-list) ! (setq nnfolder-group-alist (nnmail-get-active)) (save-excursion (set-buffer nnfolder-current-buffer) --- 321,327 ---- (is-old t) rest) (nnfolder-request-list) ! ;;(setq nnfolder-group-alist (nnmail-get-active)) (save-excursion (set-buffer nnfolder-current-buffer) *************** *** 320,326 **** days))) (progn (and gnus-verbose-backends ! (message "Deleting: %s" (car articles))) (nnfolder-delete-mail)) (setq rest (cons (car articles) rest)))) (setq articles (cdr articles))) --- 337,343 ---- days))) (progn (and gnus-verbose-backends ! (message "Deleting article %s..." (car articles))) (nnfolder-delete-mail)) (setq rest (cons (car articles) rest)))) (setq articles (cdr articles))) *************** *** 374,380 **** result)) (defun nnfolder-request-accept-article (group &optional last) ! (nnfolder-possibly-change-group group) (let ((buf (current-buffer)) result) (goto-char (point-min)) --- 391,397 ---- result)) (defun nnfolder-request-accept-article (group &optional last) ! (and (stringp group) (nnfolder-possibly-change-group group)) (let ((buf (current-buffer)) result) (goto-char (point-min)) *** pub/dgnus/lisp/nnmbox.el Thu Jul 13 02:10:08 1995 --- dgnus/lisp/nnmbox.el Fri Jul 14 17:22:41 1995 *************** *** 251,257 **** days))) (progn (and gnus-verbose-backends ! (message "Deleting: %s" (car articles))) (nnmbox-delete-mail)) (setq rest (cons (car articles) rest)))) (setq articles (cdr articles))) --- 251,257 ---- days))) (progn (and gnus-verbose-backends ! (message "Deleting article %s..." (car articles))) (nnmbox-delete-mail)) (setq rest (cons (car articles) rest)))) (setq articles (cdr articles))) *** pub/dgnus/lisp/nnmh.el Thu Jul 13 02:10:08 1995 --- dgnus/lisp/nnmh.el Fri Jul 14 17:22:40 1995 *************** *** 272,278 **** (current-time-string mod-time)) days)))) (progn ! (and gnus-verbose-backends (message "Deleting %s..." article)) (condition-case () (delete-file article) (file-error --- 272,279 ---- (current-time-string mod-time)) days)))) (progn ! (and gnus-verbose-backends ! (message "Deleting article %s..." article)) (condition-case () (delete-file article) (file-error *** pub/dgnus/lisp/nnml.el Thu Jul 13 02:10:09 1995 --- dgnus/lisp/nnml.el Fri Jul 14 17:22:41 1995 *************** *** 289,295 **** (current-time-string mod-time)) days)))) (progn ! (and gnus-verbose-backends (message "Deleting %s..." article)) (condition-case () (delete-file article) (file-error --- 289,296 ---- (current-time-string mod-time)) days)))) (progn ! (and gnus-verbose-backends ! (message "Deleting article %s..." article)) (condition-case () (delete-file article) (file-error *** pub/dgnus/lisp/ChangeLog Thu Jul 13 02:10:13 1995 --- dgnus/lisp/ChangeLog Sat Jul 15 20:16:35 1995 *************** *** 1,3 **** --- 1,71 ---- + Sat Jul 15 20:08:47 1995 Lars Magne Ingebrigtsen + + * gnus-kill.el (gnus-kill-save-kill-file): New variable. + (gnus-kill-parse-gnus-kill-file): Don't save kill files unless you + really want to. + + Sat Jul 15 03:54:00 1995 Sudish Joseph + + * gnus-vis.el (gnus-article-add-button): Use overlays for + gnus-article-button-face to ensure that it gets priority + during display. + + Sat Jul 15 17:50:23 1995 Lars Magne Ingebrigtsen + + * gnus.el (gnus-article-summary-command-nosave): Pop instead of + switch to the summary buffer. + + * gnus-score.el (gnus-summary-increase-score): Make sure + gnus-score-winconf isn't nil. + + * gnus-vm.el: Use gnus-article-copy instead of the article buffer. + + * gnus-vis.el (gnus-summary-make-menu-bar): Don't recreate menus + if the are already created. + + * gnus.el (gnus-group-get-new-news): Would not check unread + articles when using permament levels. + + * nnfolder.el (nnfolder-request-accept-article): Didn't accept a + respool request. + + * gnus-score.el (gnus-score-add-followups): Bugged out all over + the place. + + Fri Jul 14 15:25:20 1995 Per Abrahamsen + + * gnus-vis.el (gnus-button-url): Default to `gnus-netscape-open-url'. + (gnus-netscape-open-url): New function. + (gnus-netscape-start-url): New function. + + Fri Jul 14 10:03:07 1995 Lars Magne Ingebrigtsen + + * gnus.el (gnus-cache-removeable-articles): Make this a local + variable to the summary buffers. + + * gnus-cache.el (gnus-cache-change-buffer): Don't reset + gnus-cache-removeable-articles here. + + * gnus-msg.el (gnus-summary-followup): Make sure we get the + current headers. + + * gnus-ems.el: Removed def for `gnus-header-face-alist'. + (gnus-ems-redefine): Redefined gnus-article-push-button for + XEmacs. + + Thu Jul 13 12:12:15 1995 Scott Byer + + * nnfolder.el (nnfolder-request-expire-articles) commented out + line that was causing a problem when exiting group. + + * nnfolder.el (nnfolder-request-list) always get the active list + from the file, since we're being more careful to keep it up to + date. Fixes new-group creation problems. + + * nnfolder.el (nnfolder-request-group) added timestamp check on + active file. Fixed problem of new messages not being shown upon + first starting up (ding). + Thu Jul 13 00:14:09 1995 Lars Magne Ingebrigtsen * nndoc.el (nndoc-type-to-regexp): Some digests do not start with *** pub/dgnus/texi/gnus.texi Thu Jul 13 02:10:16 1995 --- dgnus/texi/gnus.texi Sat Jul 15 20:16:28 1995 *************** *** 5663,5668 **** --- 5663,5673 ---- The "global" kill file (not in the score file sense of "global", of course) is called just @file{KILL}. + @vindex gnus-kill-save-kill-file + If @code{gnus-kill-save-kill-file} is non-@code{nil}, Gnus will save the + kill file after processing, which is necessary if you use expiring + kills. + @node Mail Group Commands @section Mail Group Commands