+Sat Jun 15 10:44:16 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * smiley.el: Included in distribution.
+
+Sat Jun 15 06:25:19 1996 Lars Magne Ingebrigtsen <larsi@aegir.ifi.uio.no>
+
+ * custom.el (custom-xmas-set-text-properties): Ignore string
+ props.
+
+Sat Jun 15 03:12:58 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * nnvirtual.el (nnvirtual-request-update-mark): Would bug out on
+ pseudos.
+
+ * gnus.el (gnus-read-descriptions-file): Insert prefix for foreign
+ groups.
+ (gnus-group-describe-group): Just `force' the current group.
+
+Sat Jun 15 02:43:29 1996 Christopher Davis <ckd@loiosh.kei.com>
+
+ * message.el (message-mode): Have signature separator be paragraph
+ separator.
+
+Sat Jun 15 02:26:08 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * messagexmas.el (message-exchange-point-and-mark): fset to xmas.
+
+Sat Jun 15 01:59:08 1996 lantz moore <lantz_moore@ece.uc.edu>
+
+ * gnus-msg.el (gnus-inews-insert-archive-gcc): Don't insert spaces
+ at the end.
+
+Sat Jun 15 01:58:17 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * message.el (message-tokenize-header): Would return empty
+ strings.
+
+Thu Jun 13 18:26:34 1996 Christoph Wedler <wedler@fmi.uni-passau.de>
+
+ * gnus-scomo.el (gnus-score-make-menu-bar): Correct Exit function.
+
+ * gnus-score.el (gnus-score-edit-file): Correct message.
+
+ * gnus-srvr.el (gnus-server-make-menu-bar): Use two symbols for
+ two menus.
+
+ * gnus-xmas.el (gnus-xmas-score-menu-add): New function.
+ (gnus-xmas-redefine): Use it.
+ (gnus-xmas-server-menu-add): Add two menus.
+
+ * nnfolder.el (nnfolder-generate-active-file): Use other function
+ to read file (not sure whether this is OK, but now it worked for
+ me, even with VM folders)
+ (nnfolder-read-folder): delete oldactive (never used)
+
+Sat Jun 15 00:45:53 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * messagexmas.el (message-xmas-setup-toolbar): If one icon doesn't
+ exist, report a failure.
+
+ * nnmh.el (nnmh-request-expire-articles): Message errors.
+
+Fri Jun 14 13:06:43 1996 Steven L Baur <steve@miranova.com>
+
+ * message.el (message-yank-original): Used misnamed wrapper
+ function.
+
+ * messagexmas.el (message-xmas-exchange-point-and-mark): Used
+ misnamed control variable.
+
Fri Jun 14 06:24:02 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus.el: Gnus v5.2.17 is released.
(funcall 'set-face-underline-p 'underline t))))
(defun custom-xmas-set-text-properties (start end props &optional buffer)
- (if (or (null buffer) (bufferp buffer))
+ (if (null buffer)
(if props
(while props
(custom-put-text-property
(setq byte-compile-warnings
'(free-vars unresolved callargs redefine obsolete))))
(when (or (not (member file '("gnus-xmas.el" "gnus-picon.el"
- "messagexmas.el" "nnheaderxm.el")))
+ "messagexmas.el" "nnheaderxm.el"
+ "smiley.el")))
xemacs)
(condition-case ()
(byte-compile-file file)
'(gnus-article-hide-headers-if-wanted
gnus-article-hide-boring-headers
gnus-article-treat-overstrike
- gnus-article-display-x-face
- gnus-article-maybe-highlight)
+ gnus-article-maybe-highlight
+ gnus-article-display-x-face)
'(gnus-article-hide-headers-if-wanted
gnus-article-hide-boring-headers
gnus-article-treat-overstrike
'gnus-score-custom-get
'gnus-score-custom-save))
(make-local-variable 'gnus-score-custom-file)
- (setq gnus-score-custom-file (expand-file-name "SCORE" gnus-kill-files-directory))
+ (setq gnus-score-custom-file
+ (expand-file-name "SCORE" gnus-kill-files-directory))
(make-local-variable 'gnus-score-alist)
(setq gnus-score-alist nil)
(custom-reset-all))
name
(gnus-group-prefixed-name
name gnus-message-archive-method)))
- (insert " "))
+ (if groups (insert " ")))
(insert "\n"))))))
(defun gnus-summary-send-draft ()
(easy-menu-define
gnus-score-menu gnus-score-mode-map ""
'("Score"
- ["Exit" gnus-score-edit-done t]
+ ["Exit" gnus-score-edit-exit t]
["Insert date" gnus-score-edit-insert-date t]
["Format" gnus-score-pretty-print t]))
(run-hooks 'gnus-score-menu-hook)))
(setq gnus-prev-winconf winconf))
(gnus-message
4 (substitute-command-keys
- "\\<gnus-score-mode-map>\\[gnus-score-edit-done] to save edits")))
+ "\\<gnus-score-mode-map>\\[gnus-score-edit-exit] to save edits")))
(defun gnus-score-load-file (file)
;; Load score file FILE. Returns a list a retrieved score-alists.
(defun gnus-server-make-menu-bar ()
(gnus-visual-turn-off-edit-menu 'server)
- (unless (boundp 'gnus-server-menu)
+ (unless (boundp 'gnus-server-server-menu)
(easy-menu-define
- gnus-server-menu gnus-server-mode-map ""
+ gnus-server-server-menu gnus-server-mode-map ""
'("Server"
["Add" gnus-server-add-server t]
["Browse" gnus-server-read-server t]
))
(easy-menu-define
- gnus-server-menu gnus-server-mode-map ""
+ gnus-server-connections-menu gnus-server-mode-map ""
'("Connections"
["Open" gnus-server-open-server t]
["Close" gnus-server-close-server t]
(gnus-xmas-menu-add article
gnus-article-article-menu gnus-article-treatment-menu))
+(defun gnus-xmas-score-menu-add ()
+ (gnus-xmas-menu-add score
+ gnus-score-menu))
+
(defun gnus-xmas-pick-menu-add ()
(gnus-xmas-menu-add pick
gnus-pick-menu))
(defun gnus-xmas-server-menu-add ()
(gnus-xmas-menu-add menu
- gnus-server-menu))
+ gnus-server-server-menu gnus-server-connections-menu))
(defun gnus-xmas-browse-menu-add ()
(gnus-xmas-menu-add browse
(add-hook 'gnus-group-mode-hook 'gnus-xmas-group-menu-add)
(add-hook 'gnus-summary-mode-hook 'gnus-xmas-summary-menu-add)
(add-hook 'gnus-article-mode-hook 'gnus-xmas-article-menu-add)
+ (add-hook 'gnus-score-mode-hook 'gnus-xmas-score-menu-add)
(add-hook 'gnus-pick-mode-hook 'gnus-xmas-pick-menu-add)
(add-hook 'gnus-tree-mode-hook 'gnus-xmas-tree-menu-add)
(re-search-forward "^From:" nil t)
(beginning-of-line)
(set-extent-begin-glyph
- (make-extent (point) (point)) xface-glyph))))
+ (make-extent (point) (1+ (point))) xface-glyph))))
;;; gnus-xmas.el ends here
"gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version-number "5.2.17"
+(defconst gnus-version-number "5.2.19"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
gnus-group-display-picons gnus-picons-article-display-x-face)
("gnus-gl" bbb-login bbb-logout bbb-grouplens-group-p
gnus-grouplens-mode)
+ ("smiley" :interactive t gnus-smiley-display)
("gnus-vm" gnus-vm-mail-setup)
("gnus-vm" :interactive t gnus-summary-save-in-vm
gnus-summary-save-article-vm))))
(defun gnus-group-describe-group (force &optional group)
"Display a description of the current newsgroup."
(interactive (list current-prefix-arg (gnus-group-group-name)))
- (and force (setq gnus-description-hashtb nil))
+ (when (and force
+ gnus-description-hashtb)
+ (gnus-sethash group nil gnus-description-hashtb))
(let ((method (gnus-find-method-for-group group))
desc)
(or group (error "No group name given"))
t))
(defun gnus-read-descriptions-file (&optional method)
- (let ((method (or method gnus-select-method)))
+ (let ((method (or method gnus-select-method))
+ group)
(when (stringp method)
(setq method (gnus-server-to-method method)))
;; We create the hashtable whether we manage to read the desc file
(gnus-message 1 "Couldn't read newsgroups descriptions")
nil)
(t
- (let (group)
- (save-excursion
- (save-restriction
- (set-buffer nntp-server-buffer)
- (goto-char (point-min))
- (if (or (search-forward "\n.\n" nil t)
+ (save-excursion
+ (save-restriction
+ (set-buffer nntp-server-buffer)
+ (goto-char (point-min))
+ (when (or (search-forward "\n.\n" nil t)
(goto-char (point-max)))
- (progn
- (beginning-of-line)
- (narrow-to-region (point-min) (point))))
- (goto-char (point-min))
- (while (not (eobp))
- ;; If we get an error, we set group to 0, which is not a
- ;; symbol...
- (setq group
- (condition-case ()
- (let ((obarray gnus-description-hashtb))
- ;; Group is set to a symbol interned in this
- ;; hash table.
- (read nntp-server-buffer))
- (error 0)))
- (skip-chars-forward " \t")
- ;; ... which leads to this line being effectively ignored.
- (and (symbolp group)
- (set group (buffer-substring
- (point) (progn (end-of-line) (point)))))
- (forward-line 1))))
- (gnus-message 5 "Reading descriptions file...done")
- t)))))
+ (beginning-of-line)
+ (narrow-to-region (point-min) (point)))
+ ;; If these are groups from a foreign select method, we insert the
+ ;; group prefix in front of the group names.
+ (and method (not (gnus-server-equal
+ (gnus-server-get-method nil method)
+ (gnus-server-get-method nil gnus-select-method)))
+ (let ((prefix (gnus-group-prefixed-name "" method)))
+ (goto-char (point-min))
+ (while (and (not (eobp))
+ (progn (insert prefix)
+ (zerop (forward-line 1)))))))
+ (goto-char (point-min))
+ (while (not (eobp))
+ ;; If we get an error, we set group to 0, which is not a
+ ;; symbol...
+ (setq group
+ (condition-case ()
+ (let ((obarray gnus-description-hashtb))
+ ;; Group is set to a symbol interned in this
+ ;; hash table.
+ (read nntp-server-buffer))
+ (error 0)))
+ (skip-chars-forward " \t")
+ ;; ... which leads to this line being effectively ignored.
+ (and (symbolp group)
+ (set group (buffer-substring
+ (point) (progn (end-of-line) (point)))))
+ (forward-line 1))))
+ (gnus-message 5 "Reading descriptions file...done")
+ t))))
(defun gnus-group-get-description (group)
"Get the description of a group by sending XGTITLE to the server."
(goto-char (point-min))
(while (not (eobp))
(forward-char 1)
- (cond ((or (eobp)
- (and (looking-at regexp)
- (> (point) beg)
- (not quoted)))
+ (cond ((and (> (point) beg)
+ (or (eobp)
+ (and (looking-at regexp)
+ (not quoted))))
(push (buffer-substring beg (point)) elems)
(setq beg (match-end 0)))
((= (following-char) ?\")
paragraph-start))
(setq paragraph-separate (concat (regexp-quote mail-header-separator)
"$\\|[ \t]*[-_][-_][-_]+$\\|"
+ "-- $\\|"
paragraph-separate))
(make-local-variable 'message-reply-headers)
(setq message-reply-headers nil)
(delete-windows-on message-reply-buffer t)
(insert-buffer message-reply-buffer)
(funcall message-cite-function)
- (gnus-exchange-point-and-mark)
+ (message-exchange-point-and-mark)
(unless (bolp)
(insert ?\n))
(unless modified
(if (eq (following-char) (char-after (- (point) 2)))
(delete-char -2))))))
-(fset 'gnus-exchange-point-and-mark 'exchange-point-and-mark)
+(fset 'message-exchange-point-and-mark 'exchange-point-and-mark)
;; Support for toolbar
(when (string-match "XEmacs\\|Lucid" emacs-version)
(setq down (concat dir name "-down." xpm))
(setq disabled (concat dir name "-disabled." xpm))
(if (not (file-exists-p up))
- (set icon nil)
+ (progn
+ (set icon nil)
+ (setq bar nil
+ dir nil))
(set icon (toolbar-make-button-list
up (and (file-exists-p down) down)
(and (file-exists-p disabled) disabled)))))))
(defun message-xmas-exchange-point-and-mark ()
"Exchange point and mark, but allow for XEmacs' optional argument."
- (exchange-point-and-mark message-dont-activate-region))
+ (exchange-point-and-mark message-xmas-dont-activate-region))
+
+(fset 'message-exchange-point-and-mark 'message-xmas-exchange-point-and-mark)
(provide 'messagexmas)
(let ((delim (concat "^" message-unix-mail-delimiter))
(marker (concat "\n" nnfolder-article-marker))
(number "[0-9]+")
- (active (cadr (assoc nnfolder-current-group nnfolder-group-alist)))
+ (active (cadr (assoc nnfolder-current-group
+ nnfolder-group-alist)))
(scantime (assoc nnfolder-current-group nnfolder-scantime-alist))
(minid (lsh -1 -1))
- oldactive maxid start end newscantime)
+ maxid start end newscantime)
(setq maxid (or (cdr active) 0))
- (setq oldactive active)
(goto-char (point-min))
;; Anytime the active number is 1 or 0, it is suspect. In that
(let ((files (directory-files nnfolder-directory))
file)
(while (setq file (pop files))
- (when (nnheader-mail-file-mbox-p file)
+ (when (and (not (backup-file-name-p file))
+ (nnheader-mail-file-mbox-p file))
(nnheader-message 5 "Adding group %s..." file)
(push (list file (cons 1 0)) nnfolder-group-alist)
- (nnfolder-read-folder file)
+ (nnfolder-possibly-change-group file)
+;; (nnfolder-read-folder file)
(nnfolder-close-group file))
(message ""))))
(expand-file-name nnmh-toplev))) dir)
(nnheader-replace-chars-in-string
(substring dir (match-end 0)) ?/ ?.))
- (apply (function max) files)
- (apply (function min) files)))))))
+ (apply 'max files)
+ (apply 'min files)))))))
t)
(deffoo nnmh-request-newgroups (date &optional server)
(condition-case ()
(funcall nnmail-delete-file-function article)
(file-error
+ (nnheader-message 1 "Couldn't delete article %s in %s"
+ article newsgroup)
(setq rest (cons (car articles) rest)))))
(setq rest (cons (car articles) rest))))
(setq articles (cdr articles)))
(cgroup (cadr nart))
;; The component group might be a virtual group.
(nmark (gnus-request-update-mark cgroup (caddr nart) mark)))
- (when (and (= mark nmark)
+ (when (and nart
+ (= mark nmark)
(gnus-group-auto-expirable-p cgroup))
(setq mark gnus-expirable-mark)))
mark)
--- /dev/null
+;;; smiley.el --- displaying smiley faces
+;; Copyright (C) 1996 Free Software Foundation, Inc.
+
+;; Author: Wes Hardaker <hardaker@ece.ucdavis.edu>
+;; Keywords: fun
+
+;; 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 2, 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, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;
+;; comments go here.
+;;
+
+;;; Test smileys: :-] :-o :-) ;-) :-< :-d :-P 8-| :-(
+
+;; To use:
+;; (require 'smiley)
+;; (add-hook 'gnus-article-display-hook 'gnus-smiley-display t)
+
+(eval-when-compile (require 'cl))
+
+(defvar smiley-data-directory (message-xmas-find-glyph-directory "smilies")
+ "Location of the smiley faces files.")
+
+(defvar smiley-regexp-alist
+ '((":-*\\]" 0 "FaceGrinning.xpm")
+ (":-*[oO]" 0 "FaceStartled.xpm")
+ (":-*[)>]" 0 "FaceHappy.xpm")
+ (";-*[>)]" 0 "FaceWinking.xpm")
+ (":-[/\\]" 0 "FaceIronic.xpm")
+ (":-*|" 0 "FaceStraight.xpm")
+ (":-*<" 0 "FaceAngry.xpm")
+ (":-*d" 0 "FaceTasty.xpm")
+ (":-*[pP]" 0 "FaceYukky.xpm")
+ ("8-*|" 0 "FaceKOed.xpm")
+ (":-*(" 0 "FaceAngry.xpm"))
+ "A list of regexps to map smilies to real images.")
+
+(defvar smiley-flesh-color "yellow"
+ "Flesh color.")
+
+(defvar smiley-features-color "black"
+ "Features color.")
+
+(defvar smiley-tongue-color "red"
+ "Tongue color.")
+
+(defvar smiley-glyph-cache nil)
+(defvar smiley-running-xemacs (string-match "XEmacs" emacs-version))
+
+(defun smiley-create-glyph (smiley pixmap)
+ (and
+ smiley-running-xemacs
+ (or
+ (cdr-safe (assoc pixmap smiley-glyph-cache))
+ (let* ((xpm-color-symbols
+ (and (featurep 'xpm)
+ (append `(("flesh" ,smiley-flesh-color)
+ ("features" ,smiley-features-color)
+ ("tongue" ,smiley-tongue-color))
+ xpm-color-symbols)))
+ (glyph (make-glyph
+ (list
+ (cons 'x (expand-file-name pixmap smiley-data-directory))
+ (cons 'tty smiley)))))
+ (setq smiley-glyph-cache (cons (cons pixmap glyph) smiley-glyph-cache))
+ (set-glyph-face glyph 'default)
+ glyph))))
+
+;;;###interactive
+(defun smiley-region (beg end)
+ "Smilify the region between point and mark."
+ (interactive "r")
+ (smiley-buffer (current-buffer) beg end))
+
+;;;###interactive
+(defun smiley-buffer (&optional buffer st nd)
+ (interactive)
+ (save-excursion
+ (and buffer (set-buffer buffer))
+ (let ((buffer-read-only nil)
+ (alist smiley-regexp-alist)
+ entry regexp beg group file)
+ (goto-char (or st (point-min)))
+ (setq beg (point))
+ ;; loop through alist
+ (while (setq entry (pop alist))
+ (setq regexp (car entry)
+ group (cadr entry)
+ file (caddr entry))
+ (goto-char beg)
+ (while (re-search-forward regexp nd t)
+ (let* ((start (match-beginning group))
+ (end (match-end group))
+ (glyph (smiley-create-glyph (buffer-substring start end)
+ file)))
+ (if glyph
+ (progn
+ (mapcar 'delete-annotation (annotations-at end))
+ (let ((ext (make-extent start end)))
+ (set-extent-property ext 'invisible t)
+ (set-extent-property ext 'end-open t)
+ (set-extent-property ext 'intangible t))
+ (make-annotation glyph end 'text)
+ (goto-char end)))))))))
+
+;;;###autoload
+(defun gnus-smiley-display ()
+ (interactive)
+ (save-excursion
+ (set-buffer gnus-article-buffer)
+ (goto-char (point-min))
+ ;; We skip the headers.
+ (unless (search-forward "\n\n" nil t)
+ (goto-char (point-max)))
+ (smiley-buffer (current-buffer) (point))))
+
+(provide 'smiley)
+
+;;; smiley.el ends here
+Sat Jun 15 02:09:46 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Article Washing): Addition.
+
Fri Jun 14 04:51:17 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* message.texi: Changed name.
argument. If the @code{gnus-article-x-face-too-ugly} (which is a regexp)
matches the @code{From} header, the face will not be shown. The default
action under Emacs is to fork off an @code{xv} to view the face; under
-XEmacs the default action is to display the face after the @code{From}
-header.
+XEmacs the default action is to display the face before the @code{From}
+header. (It's nicer if XEmacs has been compiled with X-Face support --
+that will make display somewhat faster. If there's no native X-Face
+support, Gnus will try to convert the @code{X-Face} header using
+external programs from the @code{pbmplus} package and friends.) If you
+want to have this function in the display hook, it should probably come
+last.
@item W b
@kindex W b (Summary)