]> code.delx.au - gnu-emacs/blobdiff - lisp/mh-e.el
* finder.el: Bind finder-exit to 'q', not 'x'; the former is the
[gnu-emacs] / lisp / mh-e.el
index 3151de7b6fb26cc4078182f092075e88d39174eb..63cc9efe2d8abbfe25094ab0316e9f0ca46cb375 100644 (file)
@@ -1,13 +1,12 @@
 ;;; mh-e.el --- GNU Emacs interface to the MH mailer
 
+;;;  Copyright (C) 1985, 86, 87, 88, 89, 92 Free Software Foundation
+
 ;; Author: James Larus <larus@ginger.berkeley.edu>
 ;; Version: 3.7
-;; Last-Modified: 30 Jun 1992
+;; Keywords: mail
 
 (defvar mh-e-RCS-id)
-(setq mh-e-RCS-id "$Header: /var/home/larus/lib/emacs/RCS/mh-e.el,v 3.1 90/09/28 15:47:58 larus Exp Locker: larus $")
-
-;;;  Copyright (C) 1985, 86, 87, 88, 89, 92 Free Software Foundation
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but without any warranty.  No author or distributor
@@ -2741,6 +2740,52 @@ Assumes that any filename that starts with '+' is a folder name."
   (if (re-search-forward "^$\\|^-+$" nil nil)
       (forward-line arg)))
 
+
+(defun mh-unshar (dir)
+  "Unshar the current message in the directory given by DIR."
+  (interactive "DUnshar in directory: ")
+  (let ((default-directory default-directory)
+        (errbuf " *Unshar Output*")
+       (curbuf (current-buffer))
+       (show-buffer mh-show-buffer)
+       start
+       )
+    (setq dir (expand-file-name dir))
+    (if (not (eq system-type 'vax-vms))
+       (setq dir (file-name-as-directory dir)))
+    (mh-show nil)              ;;; force showing of current message
+    (save-excursion
+      (set-buffer show-buffer)
+      (goto-char (point-min))
+      (message "Looking for start of shar package ...")
+      (if (or (re-search-forward "^#![ \t]*/bin/sh" nil t)
+             (and (re-search-forward "^[^a-z0-9\"]*cut here" nil t)
+                  (forward-line 1))
+             (re-search-forward "^#" nil t)
+             (re-search-forward "^: " nil t)
+             )
+         (progn
+           (beginning-of-line)
+           (setq start (point))
+           (set-buffer curbuf)
+           (pop-to-buffer errbuf)
+           (kill-region (point-max) (point-min))
+           (insert (format "Unsharing in directory \"%s\" ...\n\n" dir))
+           (message "Please wait ...")
+           (sit-for 0)
+           (set-buffer show-buffer)
+           (setq default-directory dir)
+           (call-process-region start (point-max)
+                                "/bin/sh" nil errbuf t)
+           (pop-to-buffer curbuf)
+           (message "Unshar done")
+           )
+       (error "Can't find start of shar file")
+       )
+      )
+    )
+  )
+
 \f
 
 ;;; Build the folder-mode keymap:
@@ -2763,6 +2808,7 @@ Assumes that any filename that starts with '+' is a folder name."
 (define-key mh-folder-mode-map "\ef" 'mh-visit-folder)
 (define-key mh-folder-mode-map "\ek" 'mh-kill-folder)
 (define-key mh-folder-mode-map "\el" 'mh-list-folders)
+(define-key mh-folder-mode-map "\en" 'mh-unshar)
 (define-key mh-folder-mode-map "\eo" 'mh-write-msg-to-file)
 (define-key mh-folder-mode-map "\ep" 'mh-pack-folder)
 (define-key mh-folder-mode-map "\es" 'mh-search-folder)