[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: inline image for emacs20.x



From:  Hideyuki SHIRAI (白井秀行) <shirai@rdmg.mgcs.mei.co.jp> 曰く
Subject: [emacs-w3m:03289] Re: inline image for emacs20.x
Message-ID: <20020422.195320.20473402.shirai@rdmg.mgcs.mei.co.jp>
Date: Mon, 22 Apr 2002 19:53:20 +0900 (JST)

白井> Meadow + Mew で Multipart/Related なメールを inline 表示して遊ん
白井> でいるのですが、w3m-region() するときに、すでに同じバッファで
白井> convert が動いていると破綻しやすいようです。そのため、
白井> w3m-region() の最初で、(w3m-process-stop (current-buffer)) させ
白井> てもらいました。大勢には影響ないですよね。

白井> # Mew だと、同じ message buffer を使い回すためこうなる。

で、(そんな場合じゃないんだけど)もっと遊んでいたところ、
w3m-bitmat で w3m-insert-image() するときは、ちゃんと、insert す
る場所が画像データを挿入する場所かどうか判定した方がよい、という
結論に勝手にしてしまいました。

そのため、

(defun w3m-insert-image (beg end image url)

と url を渡す様にして、'w3m-image の値と比較するようにしました。
また、w3m-create-image で cache を使ったときに動く hook
"w3m-bitmap-cache-image-hook" を追加しました。

-- 
白井秀行 (mailto:shirai@rdmg.mgcs.mei.co.jp)

で、なにがやりたいかというと、相変わらず力付くですが、昨日の
mew-w3m.el の変更も使って、こういうのがしたかったのです。

     (add-hook 'mew-w3m-cid-retrieve-hook 'mew-w3m-cid-retrieve-get)
     (defvar mew-w3m-cid-retrieve-cids nil)
     
     (defun mew-w3m-cid-retrieve-get ()
       (setq mew-w3m-cid-retrieve-cids
	     (cons cidstx mew-w3m-cid-retrieve-cids)))

     (when (boundp 'w3m-bitmap-cache-image-hook)
       (defun mew-w3m-cid-get-syntax (url)
	 (when (and w3m-mew-support-cid
		    (eq major-mode 'mew-message-mode)
		    (string-match "^cid:\\(.+\\)" url))
	   (setq url (match-string 1 url))
	   (save-excursion
	     (let ((fld (mew-current-get-fld (mew-frame-id))))
	       (set-buffer fld)
	       (let* ((msg (mew-current-get-msg (mew-frame-id)))
		      (cache (mew-cache-hit fld msg 'must-hit))
		      (syntax (mew-cache-decode-syntax cache))
		      (cidstx (mew-syntax-get-entry-by-cid syntax url)))
		 (when cidstx
		   (run-hooks 'mew-w3m-cid-retrieve-hook)))))))
       
       (add-hook 'w3m-bitmap-cache-image-hook 'mew-w3m-cid-get-syntax))
     
     (add-hook 'mew-message-hook 'mew-w3m-cid-delete-part)

     (defun mew-w3m-cid-delete-part ()
       (when mew-w3m-cid-retrieve-cids
	 (let* ((cids mew-w3m-cid-retrieve-cids)
		(fld (mew-current-get-fld (mew-frame-id)))
		(msg (mew-current-get-msg (mew-frame-id)))
		(cache (mew-cache-hit fld msg 'must-hit))
		(syntax (mew-cache-decode-syntax cache))
		(ofld (mew-minfo-get-summary))
		alt part partstx)
	   (setq mew-w3m-cid-retrieve-cids nil)
	   (when (and syntax cids msg cache fld)
	     (save-excursion
	       (set-buffer cache)
	       (setq alt (mew-dinfo-get-use-alt))
	       (if (and ofld (mew-folder-virtualp ofld))
		   (set-buffer ofld)
		 (set-buffer fld))
	       (when (and alt
			  (mew-decode-syntax-p)
			  (<= (point) (mew-decode-syntax-end)))
		 (save-excursion
		   (goto-char (mew-decode-syntax-begin))
		   (mew-elet
		    (catch 'end
		      (while (<= (point) (mew-decode-syntax-end))
			(setq part (mew-syntax-nums))
			(unless part (throw 'end nil))
			(setq partstx (mew-syntax-get-entry syntax part))
			(if (memq partstx cids)
			    (delete-region (point) (progn (forward-line) (point)))
			  (forward-line))))
		    (set-buffer-modified-p nil)))))))))