[Date Prev][Date Next][Thread Prev][Thread Next][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)))))))))