[comp.emacs] superyank works under mh-e

ange@hplb.hpl.hp.com (Andy Norman) (07/01/89)

I enclose some code which allows mh-e users to take advantage of the recently
posted superyank package.

Enjoy...

						-- ange --

--------------------------------------------------------------------------------
(require 'mh-e)

(defun mh-yank-msg (confirm buf)
  "Insert the message in the given buffer into the current buffer citing as
per user preferences."
  (local-set-key "\C-cq"    'sy-fill-paragraph-manually)
  (local-set-key "\C-c\i"   'sy-insert-persist-attribution)
  (local-set-key "\C-c\C-o" 'sy-open-line)
  (let ((mail-reply-buffer buf))
    (save-window-excursion
      (save-restriction
	(narrow-to-region (point-max) (point-max))
	(sy-yank-original confirm)))))


(defun mh-yank-cur-msg (confirm)
  "Insert the currently displayed message into the draft buffer citing as per user
preferences. Numeric argument forces confirmation."
  (interactive "P")
  (if (and (boundp 'mh-sent-from-folder)
	   mh-sent-from-folder
	   mh-sent-from-msg)
      (let ((buf (save-excursion
		   (set-buffer mh-sent-from-folder)
		   (if mh-delete-yanked-msg-window
		       (delete-windows-on mh-show-buffer))
		   mh-show-buffer)))
	(mh-yank-msg confirm buf))
    (error "There is no current message.")))


(defun mh-insert-letter (confirm folder msg)
  "Insert a message from any folder into the draft buffer citing as per
user preferences. Numeric arguement forces confirmation."
  (interactive
   (list current-prefix-arg
	 (mh-prompt-for-folder "Message from" mh-sent-from-folder nil)
	 (read-input (format "Message number%s: "
			     (if mh-sent-from-msg
				 (format " [%d]" mh-sent-from-msg)
				 "")))))
    (if (equal msg "")
	(setq msg (format "%d" mh-sent-from-msg)))
    (let* ((file (mh-expand-file-name msg (mh-expand-file-name folder)))
	   (buf (create-file-buffer file)))
      (save-excursion
	(set-buffer buf)
	(insert-file-contents file)
	(set-buffer-modified-p nil))
      (mh-yank-msg confirm buf)
      (kill-buffer buf)))

--
					-- ange --

					ange@hplb.hpl.hp.com

tale@pawl.rpi.edu (David C Lawrence) (07/03/89)

I had already mailed this off to superyank@cme.nist.gov last week;
curiously, mail to one of the addresses (@hpl.hp.com) bounced, who I
guess is ange.  I had also mailed it concurrently to
info-gnu-emacs@ai.mit.edu but that bounced with an unknown user as did
the same address at prep.  (Len?  Bob?  Temporary thing or did the
list move or what?)

Anyway, this function I put in mh-etc.el and require it from my
mh-compose-letter-hook.  The advantage I see with it over ange's code
is that it behaves like the original mh-yank-cur-msg with the
exception that it will quote like superyank.  This is a big win for
people like me who don't like to yank the whole 4k message when I just
want to quote three lines of it -- I set the region in the
mh-show-buffer and yank away.  The disadvantage compared to ange's
functions are that I didn't do anything with mh-insert-letter so it
still uses the old style mh-ins-buf-prefix.  I could write that if
people really want it ...

Dave
---cut---
(require 'mh-e)
(provide 'mh-etc)

(defun mh-yank-cur-msg (arg)
    "Insert the currently displayed message into the draft buffer.  Prefix each
line in the message by calling sy-insert-citation.  If a region is set in the
message's buffer, then only the region will be inserted.  Otherwise, the entire
message will be inserted if mh-yank-from-start-of-msg is non-nil.  If this
variable is nil, the portion of the message following the point will be yanked.
If mh-delete-yanked-msg-window is non-nil, any window displaying the yanked
message will be deleted.

NOTE: this function has been modified to work with the superyank package."
  (interactive "P")
  (local-set-key "\C-cq" 'sy-fill-paragraph-manually)
  (local-set-key "\C-ci" 'sy-insert-persist-attribution)
  (local-set-key "\C-c\C-o" 'sy-open-line)
  (if (and (boundp 'mh-sent-from-folder) mh-sent-from-folder mh-sent-from-msg)
      (let* ((sy-confirm-always-p (if (consp arg) t sy-confirm-always-p))
             (mh-show-buffer (save-excursion (set-buffer mh-sent-from-folder)
                                             mh-show-buffer))
             (attribution (sy-scan-rmail-for-names mh-show-buffer))
             (start (point)))
        (if mh-delete-yanked-msg-window (delete-windows-on mh-show-buffer))
        (set-mark (point))
        (insert-before-markers
         (save-excursion
           (set-buffer mh-show-buffer)
           (sy-yank-fields (point-min))
           (cond
            ((mark) (buffer-substring (point) (mark)))
            ((eq 'body mh-yank-from-start-of-msg)
             (mh-goto-header-end 1)
             (buffer-substring (point) (point-max)))
            (mh-yank-from-start-of-msg (buffer-string))
            (t (buffer-substring (point) (point-max))))))
        (sy-rewrite-headers start)
        (mail-yank-clear-headers (point) (mark))
        (setq sy-persist-attribution (concat attribution " "))
        (sy-insert-citation (point) (mark) attribution))
    (error "There is no current message.")))
--cut--
--
 (setq mail '("tale@pawl.rpi.edu" "tale@itsgw.rpi.edu" "tale@rpitsmts.bitnet"))
        "Drinking coffee for instant relaxation?  That's like drinking
             alcohol for instant motor skills."  -- Mike Price (?)