Mercurial > hg > xemacs-beta
diff lisp/hyperbole/hmh.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/hmh.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,177 @@ +;;!emacs +;; +;; FILE: hmh.el +;; SUMMARY: Support for Hyperbole buttons in mail reader: Mh. +;; USAGE: GNU Emacs Lisp Library +;; KEYWORDS: hypermedia, mail +;; +;; AUTHOR: Bob Weiner +;; ORG: Brown U. +;; +;; ORIG-DATE: 21-May-91 at 17:06:36 +;; LAST-MOD: 19-May-95 at 15:09:30 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: +;; +;; Automatically configured for use in "hsite.el". +;; If hsite loading fails prior to initializing Hyperbole Mh support, +;; +;; {M-x Mh-init RTN} +;; +;; will do it. +;; +;; +;; Have not yet overloaded 'mh-yank-cur-msg' to yank and hide +;; button data from mail reader buffer. +;; Have not yet overloaded 'mh-insert-letter' to highlight buttons +;; and to merge its button data. +;; +;; DESCRIP-END. + +;;; ************************************************************************ +;;; Other required Elisp libraries +;;; ************************************************************************ +(require 'hmail) +(load "hsmail") +(require 'mh-e) + +;;; ************************************************************************ +;;; Public variables +;;; ************************************************************************ + + +;;; ************************************************************************ +;;; Public functions +;;; ************************************************************************ + +(defun Mh-init () + "Initializes Hyperbole support for Mh mail reading." + (interactive) + (setq hmail:composer 'mh-letter-mode + hmail:lister 'mh-folder-mode + hmail:modifier 'mh-letter-mode + hmail:reader 'mh-show-mode) + (var:append 'mh-show-hook '(hmail:msg-narrow Mh-hbut-highlight)) + ;; + ;; + ;; Setup public abstract interface to Hyperbole defined mail + ;; reader-specific functions used in "hmail.el". + ;; + (rmail:init) + ;; + ;; Setup private abstract interface to mail reader-specific functions + ;; used in "hmail.el". + ;; + (fset 'rmail:get-new 'mh-inc-folder) + (fset 'rmail:msg-forward 'mh-redistribute) + (fset 'rmail:summ-msg-to 'mh-goto-msg) + (fset 'rmail:summ-new 'mh-rescan-folder) + (if (interactive-p) + (message "Hyperbole MH mail reader support initialized.")) + ) + +(defun Mh-hbut-highlight () + "Highlight any Hyperbole buttons in buffer for which display support exists." + (if (fboundp 'hproperty:but-create) (hproperty:but-create))) + +(defun Mh-msg-hdrs-full (toggled) + "If TOGGLED is non-nil, toggle full/hidden headers, else show full headers. +For now, a no-op." + ) + +(defun Mh-msg-narrow () + "Narrows mail reader buffer to current message. +This includes Hyperbole button data." + (Mh-msg-widen)) + +(defun Mh-msg-next () (mh-next-undeleted-msg 1)) + +(defun Mh-msg-num () + "Returns number of mail message that point is within." + (interactive) + (mh-get-msg-num nil)) + +(defun Mh-msg-prev () (mh-previous-undeleted-msg 1)) + +(defun Mh-msg-to-p (mail-msg-id mail-file) + "Sets current buffer to start of msg with MAIL-MSG-ID in MAIL-FILE. +Returns t if successful, else nil." + (if (not (file-readable-p mail-file)) + nil + (find-file mail-file) + (hmail:msg-narrow) + (goto-char 1) + t)) + +(defun Mh-msg-widen () + "Widens buffer to full current message including Hyperbole button data." + (Mh-to) (widen)) + +(defun Mh-to () + "Sets current buffer to a mail reader buffer." + (and (eq major-mode 'Mh-folder-mode) + (set-buffer (Mh-get-buffer Mh-show-buffer)))) + +(defun Mh-Summ-delete () (mh-delete-msg (mh-get-msg-num t))) + +(fset 'Mh-Summ-expunge 'mh-execute-commands) + +(defun Mh-Summ-goto () + (let ((msg-num (mh-get-msg-num nil))) + (mh-goto-msg msg-num nil t) + (mh-show msg-num))) + +(defun Mh-Summ-to () + "Sets current buffer to a mail listing buffer." + (let ((summ-buf)) + (save-excursion + (mapcar (function + (lambda (window) + (if summ-buf + nil + (set-buffer (window-buffer window)) + (if (eq major-mode 'Mh-folder-mode) + (setq summ-buf (current-buffer)))))) + (hypb:window-list 'no-mini))) + (if summ-buf (set-buffer summ-buf)))) + +(defun Mh-Summ-undelete-all () + (message + "(Mh-Summ-undelete-all: I don't think mh-e has an undelete operator.")) + +;;; ************************************************************************ +;;; Private functions +;;; ************************************************************************ +;;; +;;; Overlay version of this function from mh-e.el to run mh-show-hook at end. +;;; This hook may already be run, depending on the version of mh-e you are +;;; running, but running it twice shouldn't do any harm. Comment this out if +;;; you know that your mh-e.el already runs the hook. +(hypb:function-overload 'mh-display-msg nil + '(run-hooks 'mh-show-hook)) + +;;; +;;; Overlay version of 'mh-regenerate-headers' to highlight Hyperbole +;;; buttons when possible. +;;; +(hypb:function-overload 'mh-regenerate-headers nil + '(if (fboundp 'hproperty:but-create) + (hproperty:but-create))) + +;;; +;;; Set 'mh-send-letter' hook to widen to include button data before sending. +;;; +(var:append 'mh-before-send-letter-hook '(widen)) + +;;; ************************************************************************ +;;; Private variables +;;; ************************************************************************ + +(provide 'hmh) +