Mercurial > hg > xemacs-beta
comparison lisp/tm/tm-play.el @ 70:131b0175ea99 r20-0b30
Import from CVS: tag r20-0b30
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:02:59 +0200 |
parents | 8d2a9b52c682 |
children | 54cc21c15cbb |
comparison
equal
deleted
inserted
replaced
69:804d1389bcd6 | 70:131b0175ea99 |
---|---|
1 ;;; tm-play.el --- decoder for tm-view.el | 1 ;;; tm-play.el --- decoder for tm-view.el |
2 | 2 |
3 ;; Copyright (C) 1994,1995,1996,1997 Free Software Foundation, Inc. | 3 ;; Copyright (C) 1994,1995,1996 Free Software Foundation, Inc. |
4 | 4 |
5 ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> | 5 ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> |
6 ;; Created: 1995/9/26 (separated from tm-view.el) | 6 ;; Created: 1995/9/26 (separated from tm-view.el) |
7 ;; Version: $Id: tm-play.el,v 1.8 1997/03/26 04:34:05 steve Exp $ | 7 ;; Version: $Id: tm-play.el,v 1.1.1.1 1996/12/18 22:43:37 steve Exp $ |
8 ;; Keywords: mail, news, MIME, multimedia | 8 ;; Keywords: mail, news, MIME, multimedia |
9 | 9 |
10 ;; This file is part of tm (Tools for MIME). | 10 ;; This file is part of tm (Tools for MIME). |
11 | 11 |
12 ;; This program is free software; you can redistribute it and/or | 12 ;; This program is free software; you can redistribute it and/or |
25 ;; Boston, MA 02111-1307, USA. | 25 ;; Boston, MA 02111-1307, USA. |
26 | 26 |
27 ;;; Code: | 27 ;;; Code: |
28 | 28 |
29 (require 'tm-view) | 29 (require 'tm-view) |
30 | |
31 (defvar mime-viewer/external-progs "/usr/local/share/tm" | |
32 "*Directory containing tm external methods.") | |
33 | |
34 (add-to-list 'exec-path mime-viewer/external-progs) | |
35 | |
36 (let ((paths (parse-colon-path (getenv "PATH")))) | |
37 (or (member mime-viewer/external-progs paths) | |
38 (setenv "PATH" | |
39 (mapconcat (function identity) | |
40 (append paths (list mime-viewer/external-progs)) | |
41 path-separator)) | |
42 )) | |
30 | 43 |
31 | 44 |
32 ;;; @ content decoder | 45 ;;; @ content decoder |
33 ;;; | 46 ;;; |
34 | 47 |
267 | 280 |
268 ;;; @ message/partial | 281 ;;; @ message/partial |
269 ;;; | 282 ;;; |
270 | 283 |
271 (defvar mime-article/coding-system-alist | 284 (defvar mime-article/coding-system-alist |
272 (list (cons 'mh-show-mode *noconv*) | 285 (and (boundp 'MULE) |
273 (cons t (mime-charset-to-coding-system default-mime-charset)) | 286 '((mh-show-mode . *noconv*) |
274 )) | 287 (t . *ctext*) |
275 | 288 ))) |
276 (cond ((boundp 'MULE) ; for MULE 2.3 or older | 289 |
277 (defun mime-article::write-region (start end file) | 290 (defvar mime-article/kanji-code-alist |
278 (let ((file-coding-system | 291 (and (boundp 'NEMACS) |
279 (cdr | 292 '((mh-show-mode . nil) |
280 (or (assq major-mode mime-article/coding-system-alist) | 293 (t . 2) |
281 (assq t mime-article/coding-system-alist) | 294 ))) |
282 )))) | |
283 (write-region start end file) | |
284 )) | |
285 ) | |
286 ((featurep 'mule) ; for Emacs/mule and XEmacs/mule | |
287 (defun mime-article::write-region (start end file) | |
288 (let ((coding-system-for-write | |
289 (cdr | |
290 (or (assq major-mode mime-article/coding-system-alist) | |
291 (assq t mime-article/coding-system-alist) | |
292 )))) | |
293 (write-region start end file) | |
294 )) | |
295 ) | |
296 ((boundp 'NEMACS) ; for NEmacs | |
297 (defun mime-article::write-region (start end file) | |
298 (let ((kanji-fileio-code | |
299 (cdr | |
300 (or (assq major-mode mime-article/kanji-code-alist) | |
301 (assq t mime-article/kanji-code-alist) | |
302 )))) | |
303 (write-region start end file) | |
304 )) | |
305 ) | |
306 (t ; for Emacs 19 or older and XEmacs without mule | |
307 (defalias 'mime-article::write-region 'write-region) | |
308 )) | |
309 | 295 |
310 (defun mime-article/decode-message/partial (beg end cal) | 296 (defun mime-article/decode-message/partial (beg end cal) |
311 (goto-char beg) | 297 (goto-char beg) |
312 (let* ((root-dir (expand-file-name | 298 (let* ((root-dir (expand-file-name |
313 (concat "m-prts-" (user-login-name)) mime/tmp-dir)) | 299 (concat "m-prts-" (user-login-name)) mime/tmp-dir)) |
314 (id (cdr (assoc "id" cal))) | 300 (id (cdr (assoc "id" cal))) |
315 (number (cdr (assoc "number" cal))) | 301 (number (cdr (assoc "number" cal))) |
316 (total (cdr (assoc "total" cal))) | 302 (total (cdr (assoc "total" cal))) |
303 (the-buf (current-buffer)) | |
317 file | 304 file |
318 (mother mime::article/preview-buffer) | 305 (mother mime::article/preview-buffer) |
319 ) | 306 (win-conf (save-excursion |
320 (or (file-exists-p root-dir) | 307 (set-buffer mother) |
308 mime::preview/original-window-configuration)) | |
309 ) | |
310 (if (not (file-exists-p root-dir)) | |
321 (make-directory root-dir) | 311 (make-directory root-dir) |
322 ) | 312 ) |
323 (setq id (replace-as-filename id)) | 313 (setq id (replace-as-filename id)) |
324 (setq root-dir (concat root-dir "/" id)) | 314 (setq root-dir (concat root-dir "/" id)) |
325 (or (file-exists-p root-dir) | 315 (if (not (file-exists-p root-dir)) |
326 (make-directory root-dir) | 316 (make-directory root-dir) |
327 ) | 317 ) |
328 (setq file (concat root-dir "/FULL")) | 318 (setq file (concat root-dir "/FULL")) |
329 (if (file-exists-p file) | 319 (if (not (file-exists-p file)) |
330 (let ((full-buf (get-buffer-create "FULL")) | 320 (progn |
331 (pwin (or (get-buffer-window mother) | 321 (re-search-forward "^$") |
332 (get-largest-window))) | 322 (goto-char (1+ (match-end 0))) |
333 ) | 323 (setq file (concat root-dir "/" number)) |
334 (save-window-excursion | 324 (let ((file-coding-system |
335 (set-buffer full-buf) | 325 (cdr |
336 (erase-buffer) | 326 (or (assq major-mode mime-article/coding-system-alist) |
337 (as-binary-input-file (insert-file-contents file)) | 327 (assq t mime-article/coding-system-alist) |
338 (setq major-mode 'mime/show-message-mode) | 328 ))) |
339 (mime/viewer-mode mother) | 329 (kanji-fileio-code |
330 (cdr | |
331 (or (assq major-mode mime-article/kanji-code-alist) | |
332 (assq t mime-article/kanji-code-alist) | |
333 ))) | |
334 ) | |
335 (write-region (point) (point-max) file) | |
340 ) | 336 ) |
341 (set-window-buffer pwin | 337 (if (get-buffer mime/temp-buffer-name) |
342 (save-excursion | 338 (kill-buffer mime/temp-buffer-name) |
343 (set-buffer full-buf) | 339 ) |
344 mime::article/preview-buffer)) | 340 (switch-to-buffer mime/temp-buffer-name) |
345 (select-window pwin) | 341 (let ((i 1) |
342 (max (string-to-int total)) | |
343 (file-coding-system-for-read (if (boundp 'MULE) | |
344 *noconv*)) | |
345 kanji-fileio-code) | |
346 (catch 'tag | |
347 (while (<= i max) | |
348 (setq file (concat root-dir "/" (int-to-string i))) | |
349 (if (not (file-exists-p file)) | |
350 (progn | |
351 (switch-to-buffer the-buf) | |
352 (throw 'tag nil) | |
353 )) | |
354 (insert-file-contents file) | |
355 (goto-char (point-max)) | |
356 (setq i (1+ i)) | |
357 ) | |
358 ;;(delete-other-windows) | |
359 (let ((buf (current-buffer))) | |
360 (write-file (concat root-dir "/FULL")) | |
361 (set-window-configuration win-conf) | |
362 (let ((win (get-buffer-window mother))) | |
363 (if win | |
364 (select-window win) | |
365 )) | |
366 (set-window-buffer (selected-window) buf) | |
367 ;;(set-window-buffer buf) | |
368 (setq major-mode 'mime/show-message-mode) | |
369 ) | |
370 (mime/viewer-mode mother) | |
371 (pop-to-buffer (current-buffer)) | |
372 )) | |
346 ) | 373 ) |
347 (re-search-forward "^$") | 374 (progn |
348 (goto-char (1+ (match-end 0))) | 375 ;;(delete-other-windows) |
349 (setq file (concat root-dir "/" number)) | 376 (set-window-configuration win-conf) |
350 (mime-article::write-region (point) (point-max) file) | 377 (select-window (or (get-buffer-window mother) |
351 (let ((total-file (concat root-dir "/CT"))) | 378 (get-buffer-window |
352 (setq total | 379 (save-excursion |
353 (if total | 380 (set-buffer mother) |
354 (progn | 381 mime::preview/article-buffer)) |
355 (or (file-exists-p total-file) | 382 (get-largest-window) |
356 (save-excursion | |
357 (set-buffer | |
358 (get-buffer-create mime/temp-buffer-name)) | |
359 (erase-buffer) | |
360 (insert total) | |
361 (write-file total-file) | |
362 (kill-buffer (current-buffer)) | |
363 )) | |
364 (string-to-number total) | |
365 ) | |
366 (and (file-exists-p total-file) | |
367 (save-excursion | |
368 (set-buffer (find-file-noselect total-file)) | |
369 (prog1 | |
370 (and (re-search-forward "[0-9]+" nil t) | |
371 (string-to-number | |
372 (buffer-substring (match-beginning 0) | |
373 (match-end 0))) | |
374 ) | |
375 (kill-buffer (current-buffer)) | |
376 ))) | |
377 ))) | |
378 (if (and total (> total 0)) | |
379 (catch 'tag | |
380 (save-excursion | |
381 (set-buffer (get-buffer-create mime/temp-buffer-name)) | |
382 (let ((full-buf (current-buffer))) | |
383 (erase-buffer) | |
384 (let ((i 1)) | |
385 (while (<= i total) | |
386 (setq file (concat root-dir "/" (int-to-string i))) | |
387 (or (file-exists-p file) | |
388 (throw 'tag nil) | |
389 ) | |
390 (as-binary-input-file (insert-file-contents file)) | |
391 (goto-char (point-max)) | |
392 (setq i (1+ i)) | |
393 )) | |
394 (as-binary-output-file (write-file (concat root-dir "/FULL"))) | |
395 (let ((i 1)) | |
396 (while (<= i total) | |
397 (let ((file (format "%s/%d" root-dir i))) | |
398 (and (file-exists-p file) | |
399 (delete-file file) | |
400 )) | 383 )) |
401 (setq i (1+ i)) | 384 (as-binary-input-file |
402 )) | 385 (set-buffer (get-buffer-create "FULL")) |
403 (let ((file (expand-file-name "CT" root-dir))) | 386 (insert-file-contents file) |
404 (and (file-exists-p file) | 387 ) |
405 (delete-file file) | 388 (setq major-mode 'mime/show-message-mode) |
406 )) | 389 (mime/viewer-mode mother) |
407 (save-window-excursion | 390 ;;(pop-to-buffer (current-buffer)) |
408 (setq major-mode 'mime/show-message-mode) | 391 )) |
409 (mime/viewer-mode mother) | 392 )) |
410 ) | |
411 (let ((pwin (or (get-buffer-window mother) | |
412 (get-largest-window) | |
413 )) | |
414 (pbuf (save-excursion | |
415 (set-buffer full-buf) | |
416 mime::article/preview-buffer))) | |
417 (set-window-buffer pwin pbuf) | |
418 (select-window pwin) | |
419 ))))) | |
420 ))) | |
421 | 393 |
422 | 394 |
423 ;;; @ rot13-47 | 395 ;;; @ rot13-47 |
424 ;;; | 396 ;;; |
425 | |
426 (unless (boundp 'view-mode-map) | |
427 (require 'view)) | |
428 | |
429 (defconst mime-view-text/plain-mode-map (copy-keymap view-mode-map)) | |
430 (define-key mime-view-text/plain-mode-map | |
431 "q" (function mime-view-text/plain-exit)) | |
432 | |
433 (defun mime-view-text/plain-mode () | |
434 "\\{mime-view-text/plain-mode-map}" | |
435 (setq buffer-read-only t) | |
436 (setq major-mode 'mime-view-text/plain-mode) | |
437 (setq mode-name "MIME-View text/plain") | |
438 (use-local-map mime-view-text/plain-mode-map) | |
439 ) | |
440 | |
441 (defun mime-view-text/plain-exit () | |
442 (interactive) | |
443 (kill-buffer (current-buffer)) | |
444 ) | |
445 | 397 |
446 (defun mime-article/decode-caesar (beg end cal) | 398 (defun mime-article/decode-caesar (beg end cal) |
447 (let* ((cnum (mime-article/point-content-number beg)) | 399 (let* ((cnum (mime-article/point-content-number beg)) |
448 (cur-buf (current-buffer)) | 400 (cur-buf (current-buffer)) |
449 (new-name (format "%s-%s" (buffer-name) cnum)) | 401 (new-name (format "%s-%s" (buffer-name) cnum)) |
451 (charset (cdr (assoc "charset" cal))) | 403 (charset (cdr (assoc "charset" cal))) |
452 (encoding (cdr (assq 'encoding cal))) | 404 (encoding (cdr (assq 'encoding cal))) |
453 (mode major-mode) | 405 (mode major-mode) |
454 str) | 406 str) |
455 (setq str (buffer-substring beg end)) | 407 (setq str (buffer-substring beg end)) |
456 (let ((pwin (or (get-buffer-window mother) | 408 (switch-to-buffer new-name) |
457 (get-largest-window))) | |
458 (buf (get-buffer-create new-name)) | |
459 ) | |
460 (set-window-buffer pwin buf) | |
461 (set-buffer buf) | |
462 (select-window pwin) | |
463 ) | |
464 (setq buffer-read-only nil) | 409 (setq buffer-read-only nil) |
465 (erase-buffer) | 410 (erase-buffer) |
466 (insert str) | 411 (insert str) |
467 (goto-char (point-min)) | 412 (goto-char (point-min)) |
468 (if (re-search-forward "^\n" nil t) | 413 (if (re-search-forward "^\n" nil t) |
476 (save-excursion | 421 (save-excursion |
477 (set-mark (point-min)) | 422 (set-mark (point-min)) |
478 (goto-char (point-max)) | 423 (goto-char (point-max)) |
479 (tm:caesar-region) | 424 (tm:caesar-region) |
480 ) | 425 ) |
481 (set-buffer-modified-p nil) | 426 (view-mode) |
482 (mime-view-text/plain-mode) | |
483 )) | 427 )) |
484 | 428 |
485 | 429 |
486 ;;; @ end | 430 ;;; @ end |
487 ;;; | 431 ;;; |