diff lisp/hyperbole/hgnus.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children 4103f0995bd7
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/hyperbole/hgnus.el	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,137 @@
+;;!emacs
+;;
+;; FILE:         hgnus.el
+;; SUMMARY:      Support Hyperbole buttons in news reader/poster: GNUS.
+;; USAGE:        GNU Emacs Lisp Library
+;; KEYWORDS:     hypermedia, news
+;;
+;; AUTHOR:       Bob Weiner
+;; ORG:          Brown U.
+;;
+;; ORIG-DATE:    24-Dec-91 at 22:29:28 by Bob Weiner
+;; LAST-MOD:      8-Aug-95 at 10:53:53 by Bob Weiner
+;;
+;; This file is part of Hyperbole.
+;; Available for use and distribution under the same terms as GNU Emacs.
+;;
+;; Copyright (C) 1991-1995, Free Software Foundation, Inc.
+;; Developed with support from Motorola Inc.
+;;
+;; DESCRIPTION:  
+;;
+;;   This only works with GNUS 3.15 or above, so be sure to check your
+;;   newsreader version {M-ESC gnus-version RET} before reporting any
+;;   problems.
+;;
+;;   Automatically configured for use in "hyperbole.el".
+;;   If hsite loading fails prior to initializing Hyperbole Gnus support,
+;;
+;;       {M-x Gnus-init RTN}
+;;
+;;   will do it.
+;;
+;;
+;;   Have not yet overloaded 'news-reply-yank-original'
+;;   to yank and hide button data from news article buffer.
+;;
+;; DESCRIP-END.
+
+;;; ************************************************************************
+;;; Other required Elisp libraries
+;;; ************************************************************************
+
+(require 'hmail)
+(require 'hsmail)
+;; This is not in Gnus 5.x
+;(require 'gnuspost)
+
+;;; ************************************************************************
+;;; Public variables
+;;; ************************************************************************
+
+(setq hnews:composer 'news-reply-mode
+      hnews:lister   'gnus-summary-mode
+      hnews:reader   'gnus-article-mode)
+
+
+;;; ************************************************************************
+;;; Public functions
+;;; ************************************************************************
+
+(defun Gnus-init ()
+  "Initializes Hyperbole support for Gnus Usenet news reading."
+  (interactive)
+  nil)
+
+(defun lnews:to ()
+  "Sets current buffer to the Usenet news article summary listing buffer."
+  (and (eq major-mode hnews:reader) (set-buffer gnus-summary-buffer)))
+
+(defun rnews:to ()
+  "Sets current buffer to the Usenet news article reader buffer."
+  (and (eq major-mode hnews:lister) (set-buffer gnus-article-buffer)))
+
+(defun rnews:summ-msg-to ()
+  "Displays news message associated with current summary header."
+  (let ((article (gnus-summary-article-number)))
+    (if (or (null gnus-current-article)
+	    (/= article gnus-current-article))
+	;; Selected subject is different from current article's.
+	(gnus-summary-display-article article))))
+
+
+;;; Overlay 'gnus-inews-article' from "gnuspost.el" to make it include
+;;; any signature before Hyperbole button data.  Does this by having
+;;; signature inserted within narrowed buffer and then applies a hook to
+;;; have the buffer widened before sending.
+(hypb:function-symbol-replace
+  'gnus-inews-article 'widen 'hmail:msg-narrow)
+
+;;; Overload this function from "rnewspost.el" for supercite compatibility
+;;; only when supercite is in use.
+(if (hypb:supercite-p)
+    (defun news-reply-yank-original (arg)
+      "Supercite version of news-reply-yank-original.
+Insert the message being replied to in the reply buffer. Puts point
+before the mail headers and mark after body of the text.  Calls
+mail-yank-original to actually yank the message into the buffer and
+cite text.  
+
+If mail-yank-original is not overloaded by supercite, each nonblank
+line is indented ARG spaces (default 3).  Just \\[universal-argument]
+as ARG means don't indent and don't delete any header fields."
+      (interactive "P")
+      (mail-yank-original arg)
+      (exchange-point-and-mark)
+      (run-hooks 'news-reply-header-hook))
+  )
+
+;;; ************************************************************************
+;;; Private variables
+;;; ************************************************************************
+;;;
+(var:append 'gnus-Inews-article-hook '(widen))
+;;;
+;;; Hide any Hyperbole button data and highlight buttons if possible
+;;; in news article being read.
+(var:append 'gnus-article-prepare-hook
+	    (if (fboundp 'hproperty:but-create)
+		'(hmail:msg-narrow hproperty:but-create)
+	      '(hmail:msg-narrow)))
+
+(if (fboundp 'hproperty:but-create)
+    (var:append 'gnus-summary-prepare-hook '(hproperty:but-create)))
+
+;;; Try to setup comment addition as the first element of these hooks.
+(if (fboundp 'add-hook)
+    ;; Called from 'news-post-news' if prev unsent article exists and user
+    ;; says erase it.  Add a comment on Hyperbole button support.
+    (progn
+      (add-hook 'news-setup-hook 'smail:comment-add)
+      ;; Called from 'news-post-news' if no prev unsent article exists.
+      ;; Add a comment on Hyperbole button support.
+      (add-hook 'news-reply-mode-hook 'smail:comment-add))
+  (var:append 'news-setup-hook '(smail:comment-add))
+  (var:append 'news-reply-mode-hook '(smail:comment-add)))
+
+(provide 'hgnus)