-;;; mel-u.el: uuencode encoder/decoder for GNU Emacs
+;;; mel-u.el --- uuencode encoder/decoder.
-;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc.
+;; Copyright (C) 1995,1996,1997,1998,1999 Free Software Foundation, Inc.
-;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Author: MORIOKA Tomohiko <tomo@m17n.org>
;; Created: 1995/10/25
;; Keywords: uuencode
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with this program; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Code:
-(require 'emu)
(require 'mime-def)
+(require 'path-util)
(mel-define-backend "x-uue")
variable `uuencode-external-encoder'."
(interactive "*r")
(save-excursion
- (as-binary-process (apply (function call-process-region)
- start end (car uuencode-external-encoder)
- t t nil (cdr uuencode-external-encoder))
- )
+ (let ((coding-system-for-read 'binary)
+ (coding-system-for-write 'binary))
+ (apply (function call-process-region)
+ start end (car uuencode-external-encoder)
+ t t nil
+ (cdr uuencode-external-encoder)))
;; for OS/2
;; regularize line break code
(goto-char (point-min))
(while (re-search-forward "\r$" nil t)
- (replace-match "")
- )
- ))
+ (replace-match ""))))
(defun uuencode-external-decode-region (start end)
"Decode current region by unofficial uuencode format.
variable `uuencode-external-decoder'."
(interactive "*r")
(save-excursion
- (let ((filename (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 filename
- (as-binary-process
- (apply (function call-process-region)
- start end (car uuencode-external-decoder)
- t nil nil (cdr uuencode-external-decoder))
- (as-binary-input-file (insert-file-contents 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)
- )
- ))
- )))
+ (let ((filename (make-temp-file "x-uue")))
+ (save-excursion
+ (save-restriction
+ (set-mark end)
+ (narrow-to-region start end)
+ (goto-char start)
+ (when (and (re-search-forward "^begin [0-9]+ " nil t)
+ (looking-at ".+$"))
+ (replace-match filename)
+ (let ((coding-system-for-read 'binary)
+ (coding-system-for-write 'binary))
+ (apply (function call-process-region)
+ start (mark) (car uuencode-external-decoder)
+ t nil nil
+ (cdr uuencode-external-decoder)))
+ (insert-file-contents 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))))))))
(mel-define-method-function (mime-encode-region start end (nil "x-uue"))
'uuencode-external-encode-region)
"Insert file encoded by unofficial uuencode format.
This function uses external uuencode encoder which is specified by
variable `uuencode-external-encoder'."
- (interactive (list (read-file-name "Insert encoded file: ")))
- (call-process (car uuencode-external-encoder) filename t nil
- (file-name-nondirectory filename))
- )
+ (interactive "*fInsert encoded file: ")
+ (call-process (car uuencode-external-encoder)
+ filename t nil
+ (file-name-nondirectory filename)))
(mel-define-method mime-write-decoded-region (start end filename
- (nil "x-gzip64"))
+ (nil "x-uue"))
"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: ")))
+ (interactive "*r\nFWrite 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)
- )))))
-
+ (let ((clone-buf (clone-buffer " *x-uue*"))
+ (file (make-temp-file "x-uue")))
+ (save-excursion
+ (save-restriction
+ (set-buffer clone-buf)
+ (narrow-to-region start end)
+ (setq buffer-read-only nil)
+ (goto-char start)
+ (when (and (re-search-forward "^begin [0-9]+ " nil t)
+ (looking-at ".+$"))
+ (replace-match file)
+ (let ((coding-system-for-read 'binary)
+ (coding-system-for-write 'binary))
+ (apply (function call-process-region)
+ (point-min) (point-max) (car uuencode-external-decoder)
+ nil nil nil
+ (cdr uuencode-external-decoder))
+ (rename-file file filename 'overwrites)
+ (message (concat "Wrote " filename))))))
+ (kill-buffer clone-buf))))
;;; @ end
;;;
(mel-define-backend "x-uuencode" ("x-uue"))
-;;; mel-u.el ends here
+;;; mel-u.el ends here.