;;; mel-u.el: uuencode encoder/decoder for GNU Emacs
-;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc.
+;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Created: 1995/10/25
-;; Version: $Id: mel-u.el,v 5.7 1997/03/10 15:15:09 morioka Exp $
;; Keywords: uuencode
;; This file is part of MEL (MIME Encoding Library).
;;; Code:
(require 'emu)
-(require 'mel)
+(require 'mime-def)
;;; @ variables
(defvar uuencode-external-encoder '("uuencode" "-")
"*list of uuencode encoder program name and its arguments.")
-(defvar uuencode-external-decoder
- (list "sh" "-c" (format "(cd %s; uudecode)" mime-temp-directory))
+(defvar uuencode-external-decoder '("sh" "-c" "uudecode")
"*list of uuencode decoder program name and its arguments.")
(if (looking-at ".+$")
(buffer-substring (match-beginning 0)
(match-end 0))
- ))))))
+ )))))
+ (default-directory mime-temp-directory))
(if filename
(as-binary-process
(apply (function call-process-region)
start end (car uuencode-external-decoder)
t nil nil (cdr uuencode-external-decoder))
- (setq filename (expand-file-name filename mime-temp-directory))
(as-binary-input-file (insert-file-contents filename))
- (delete-file filename)
+ ;; The previous line causes the buffer to be made read-only, I
+ ;; do not pretend to understand the control flow leading to this
+ ;; but suspect it has something to do with image-mode. -slb
+ ;; Use `inhibit-read-only' to avoid to force
+ ;; buffer-read-only nil. - tomo.
+ (let ((inhibit-read-only t))
+ (delete-file filename)
+ )
))
)))
(file-name-nondirectory filename))
)
+(defun uuencode-write-decoded-region (start end filename)
+ "Decode and write current region encoded by uuencode into FILENAME.
+START and END are buffer positions."
+ (interactive
+ (list (region-beginning) (region-end)
+ (read-file-name "Write decoded region to file: ")))
+ (save-excursion
+ (let ((file (save-excursion
+ (save-restriction
+ (narrow-to-region start end)
+ (goto-char start)
+ (if (re-search-forward "^begin [0-9]+ " nil t)
+ (if (looking-at ".+$")
+ (buffer-substring (match-beginning 0)
+ (match-end 0))
+ )))))
+ (default-directory mime-temp-directory))
+ (if file
+ (as-binary-process
+ (apply (function call-process-region)
+ start end (car uuencode-external-decoder)
+ nil nil nil (cdr uuencode-external-decoder))
+ (rename-file file filename 'overwrites)
+ )))))
+
;;; @ end
;;;