X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mime-view.el;h=b6816b45be7d7972f22e78d2820ef88c073753e9;hb=e8d952d5081c8df07f5c7550756a17283dd5ce3b;hp=91c4812803509914ccf608ef16554d34281586ad;hpb=c8b678a4782200721b12f333bcc6a8c33f5496cd;p=elisp%2Fsemi.git diff --git a/mime-view.el b/mime-view.el index 91c4812..b6816b4 100644 --- a/mime-view.el +++ b/mime-view.el @@ -264,17 +264,17 @@ Please redefine this function if you want to change default setting." ;;; @@@ predicate function ;;; -(defvar mime-view-childrens-header-showing-Content-Type-list - '("message/rfc822" "message/news")) - -(defun mime-view-header-visible-p (entity message-info) - "Return non-nil if header of ENTITY is visible." - (let ((entity-node-id (mime-entity-node-id entity))) - (member (mime-entity-type/subtype - (mime-raw-find-entity-from-node-id - (cdr entity-node-id) message-info)) - mime-view-childrens-header-showing-Content-Type-list) - )) +;; (defvar mime-view-childrens-header-showing-Content-Type-list +;; '("message/rfc822" "message/news")) + +;; (defun mime-view-header-visible-p (entity message-info) +;; "Return non-nil if header of ENTITY is visible." +;; (let ((entity-node-id (mime-entity-node-id entity))) +;; (member (mime-entity-type/subtype +;; (mime-raw-find-entity-from-node-id +;; (cdr entity-node-id) message-info)) +;; mime-view-childrens-header-showing-Content-Type-list) +;; )) ;;; @@@ entity header filter ;;; @@ -422,14 +422,17 @@ Each elements are regexp of field-name.") (body-presentation-method . mime-view-insert-message/partial-button))) -(defun mime-view-body-visible-p (entity message-info) - "Return non-nil if body of ENTITY is visible." - (ctree-match-calist mime-preview-condition - (list* (cons 'type (mime-entity-media-type entity)) - (cons 'subtype (mime-entity-media-subtype entity)) - (cons 'encoding (mime-entity-encoding entity)) - (cons 'major-mode major-mode) - (mime-entity-parameters entity)))) +(ctree-set-calist-strictly + 'mime-preview-condition '((type . message)(subtype . rfc822) + (body-presentation-method . nil) + (childrens-situation (header . visible) + (entity-button . invisible)))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . message)(subtype . news) + (body-presentation-method . nil) + (childrens-situation (header . visible) + (entity-button . invisible)))) ;;; @@@ entity filter @@ -480,77 +483,104 @@ if it is not nil.") )) -;;; @@ entity separator +;;; @ acting-condition ;;; -(defun mime-view-entity-separator-visible-p (entity message-info) - "Return non-nil if separator is needed for ENTITY." - (and (not (mime-view-header-visible-p entity message-info)) - (not (mime-view-body-visible-p entity message-info)))) +(defvar mime-acting-condition nil + "Condition-tree about how to process entity.") +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . text)(subtype . t)(mode . "play") + (method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file) + )) -;;; @ acting-condition -;;; +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . text)(subtype . plain)(mode . "play") + (method "tm-plain" nil 'file "" 'encoding 'mode 'name) + )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . text)(subtype . plain)(mode . "print") + (method "tm-plain" nil 'file "" 'encoding 'mode 'name) + )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . text)(subtype . html)(mode . "play") + (method "tm-html" nil 'file "" 'encoding 'mode 'name) + )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . text)(subtype . x-rot13-47)(mode . "play") + (method . mime-method-to-display-caesar) + )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . text)(subtype . x-rot13-47-48)(mode . "play") + (method . mime-method-to-display-caesar) + )) -(defvar mime-acting-condition - '(((type . text)(subtype . plain) - (method "tm-plain" nil 'file "" 'encoding 'mode 'name) - (mode "play" "print") - ) - ((type . text)(subtype . html) - (method "tm-html" nil 'file "" 'encoding 'mode 'name) - (mode . "play") - ) - ((type . text)(subtype . x-rot13-47) - (method . mime-method-to-display-caesar) - (mode . "play") - ) - ((type . text)(subtype . x-rot13-47-48) - (method . mime-method-to-display-caesar) - (mode . "play") - ) - - ((type . audio)(subtype . basic) - (method "tm-au" nil 'file "" 'encoding 'mode 'name) - (mode . "play") - ) - - ((type . image) - (method "tm-image" nil 'file "" 'encoding 'mode 'name) - (mode "play" "print") - ) - - ((type . video)(subtype . mpeg) - (method "tm-mpeg" nil 'file "" 'encoding 'mode 'name) - (mode . "play") - ) - - ((type . application)(subtype . postscript) - (method "tm-ps" nil 'file "" 'encoding 'mode 'name) - (mode "play" "print") - ) - ((type . application)(subtype . octet-stream) - (method . mime-method-to-save)(mode "play" "print") - ) - - ((type . message)(subtype . external-body) - ("access-type" . "anon-ftp") - (method . mime-method-to-display-message/external-ftp) - ) - ((type . message)(subtype . rfc822) - (method . mime-method-to-display-message/rfc822) - (mode . "play") - ) - ((type . message)(subtype . partial) - (method . mime-method-to-store-message/partial) - (mode . "play") - ) - - ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file) - (mode . "play") - ) - ((method . mime-method-to-save)(mode . "extract")) - )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . audio)(subtype . basic)(mode . "play") + (method "tm-au" nil 'file "" 'encoding 'mode 'name) + )) + +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . image)(mode . "play") + (method "tm-image" nil 'file "" 'encoding 'mode 'name) + )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . image)(mode . "print") + (method "tm-image" nil 'file "" 'encoding 'mode 'name) + )) + +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . video)(subtype . mpeg)(mode . "play") + (method "tm-mpeg" nil 'file "" 'encoding 'mode 'name) + )) + +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . application)(subtype . postscript)(mode . "play") + (method "tm-ps" nil 'file "" 'encoding 'mode 'name) + )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . application)(subtype . postscript)(mode . "print") + (method "tm-ps" nil 'file "" 'encoding 'mode 'name) + )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . application)(subtype . octet-stream) + (method . mime-method-to-save) + )) + +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . message)(subtype . external-body) + ("access-type" . "anon-ftp") + (method . mime-method-to-display-message/external-ftp) + )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . message)(subtype . rfc822)(mode . "play") + (method . mime-method-to-display-message/rfc822) + )) +(ctree-set-calist-strictly + 'mime-acting-condition + '((type . message)(subtype . partial)(mode . "play") + (method . mime-method-to-store-message/partial) + )) + +(ctree-set-calist-strictly + 'mime-acting-condition + '((mode . "extract") + (method . mime-method-to-save))) ;;; @ quitting method @@ -705,7 +735,7 @@ The compressed face will be piped to this command.") (cdr (assq 'message-button situation))) (body-presentation-method (cdr (assq 'body-presentation-method situation)))) - (when message-button + (when (eq message-button 'visible) (goto-char (point-max)) (mime-view-insert-entity-button message-info message-info subj) ) @@ -723,19 +753,22 @@ The compressed face will be piped to this command.") (goto-char (point-max)) (mime-view-insert-entity-button message-info message-info subj) )) - ) - (setq ne (point-max)) - (widen) - (put-text-property nb ne 'mime-view-raw-buffer ibuf) - (put-text-property nb ne 'mime-view-entity message-info) - (goto-char ne) - (let ((children (mime-entity-children message-info))) - (while children - (mime-view-display-entity (car children) message-info ibuf obuf) - (setq children (cdr children)) - )))) - -(defun mime-view-display-entity (entity message-info ibuf obuf) + (setq ne (point-max)) + (widen) + (put-text-property nb ne 'mime-view-raw-buffer ibuf) + (put-text-property nb ne 'mime-view-entity message-info) + (goto-char ne) + (let ((children (mime-entity-children message-info)) + (default-situation + (cdr (assq 'childrens-situation situation)))) + (while children + (mime-view-display-entity (car children) message-info ibuf obuf + default-situation) + (setq children (cdr children)) + ))))) + +(defun mime-view-display-entity (entity message-info ibuf obuf + default-situation) (let* ((start (mime-entity-point-min entity)) (end (mime-entity-point-max entity)) (media-type (mime-entity-media-type entity)) @@ -757,33 +790,39 @@ The compressed face will be piped to this command.") (eword-decode-string (mime-raw-get-subject params encoding))) ) - (set-buffer obuf) - (setq nb (point)) - (narrow-to-region nb nb) - (if (mime-view-entity-button-visible-p entity message-info) - (mime-view-insert-entity-button entity message-info subj) - ) - (if (mime-view-header-visible-p entity message-info) - (save-restriction - (narrow-to-region (point)(point)) - (insert-buffer-substring mime-raw-buffer start end-of-header) - (let ((f (cdr (assq mime-preview-original-major-mode - mime-view-content-header-filter-alist)))) - (if (functionp f) - (funcall f) - (mime-view-default-content-header-filter) - )) - (run-hooks 'mime-view-content-header-filter-hook) - )) (let* ((situation (ctree-match-calist mime-preview-condition (list* (cons 'type media-type) (cons 'subtype media-subtype) (cons 'encoding encoding) (cons 'major-mode major-mode) - params))) + (append params + default-situation)))) + (button-is-invisible + (eq (cdr (assq 'entity-button situation)) 'invisible)) + (header-is-visible + (eq (cdr (assq 'header situation)) 'visible)) (body-presentation-method (cdr (assq 'body-presentation-method situation)))) + (set-buffer obuf) + (setq nb (point)) + (narrow-to-region nb nb) + (or button-is-invisible + (if (mime-view-entity-button-visible-p entity message-info) + (mime-view-insert-entity-button entity message-info subj) + )) + (if header-is-visible + (save-restriction + (narrow-to-region (point)(point)) + (insert-buffer-substring mime-raw-buffer start end-of-header) + (let ((f (cdr (assq mime-preview-original-major-mode + mime-view-content-header-filter-alist)))) + (if (functionp f) + (funcall f) + (mime-view-default-content-header-filter) + )) + (run-hooks 'mime-view-content-header-filter-hook) + )) (cond ((eq body-presentation-method 'with-filter) (let ((body-filter (cdr (assq 'body-filter situation)))) (save-restriction @@ -794,20 +833,25 @@ The compressed face will be piped to this command.") ((functionp body-presentation-method) (funcall body-presentation-method situation) )) - (when (mime-view-entity-separator-visible-p entity message-info) - (goto-char (point-max)) - (insert "\n")) - ) - (setq ne (point-max)) - (widen) - (put-text-property nb ne 'mime-view-raw-buffer ibuf) - (put-text-property nb ne 'mime-view-entity entity) - (goto-char ne) - (let ((children (mime-entity-children entity))) - (while children - (mime-view-display-entity (car children) message-info ibuf obuf) - (setq children (cdr children)) - )))) + (or header-is-visible + body-presentation-method + (progn + (goto-char (point-max)) + (insert "\n") + )) + (setq ne (point-max)) + (widen) + (put-text-property nb ne 'mime-view-raw-buffer ibuf) + (put-text-property nb ne 'mime-view-entity entity) + (goto-char ne) + (let ((children (mime-entity-children entity)) + (default-situation + (cdr (assq 'childrens-situation situation)))) + (while children + (mime-view-display-entity (car children) message-info ibuf obuf + default-situation) + (setq children (cdr children)) + ))))) (defun mime-raw-get-uu-filename (param &optional encoding) (if (member (or encoding @@ -1130,14 +1174,14 @@ It calls following-method selected from variable (erase-buffer) (insert-buffer-substring the-buf p-beg p-end) (goto-char (point-min)) - (if (mime-view-header-visible-p entity message-info) - (delete-region (goto-char (point-min)) - (if (re-search-forward "^$" nil t) - (match-end 0) - (point-min))) - ) - (goto-char (point-min)) - (insert "\n") + ;; (if (mime-view-header-visible-p entity message-info) + ;; (delete-region (goto-char (point-min)) + ;; (if (re-search-forward "^$" nil t) + ;; (match-end 0) + ;; (point-min))) + ;; ) + ;;(goto-char (point-min)) + ;;(insert "\n") (goto-char (point-min)) (let ((entity-node-id (mime-entity-node-id entity)) ci str) (while (progn