E Sabof <esabof@gmail.com> writes:Thanks Evgeni, I think that brought me on track. Could you please
> The first time (doc-view-insert-image) is called, the doc-view buffer
> isn't selected, and (doc-view-current-overlay) returns the t overlay.
>
> The "fake" overlay gets "resurrected" when (doc-view-insert-image)
> calls (move-overlay) on it.
test-drive this patch (which also contains the centering stuff) and
check if the issue is fixed by it? It seems it is for me, but I only
did some very brief testing.
+++ lisp/doc-view.el 2013-03-14 07:21:18 +0000
--8<---------------cut here---------------start------------->8---
=== modified file 'lisp/doc-view.el'
--- lisp/doc-view.el 2013-02-28 04:02:36 +0000
@@ -1250,17 +1250,33 @@
(when doc-view-pending-cache-flush- (image (if (and file (file-readable-p file))
(clear-image-cache)
(setq doc-view-pending-cache-flush nil))
- (let ((ol (doc-view-current-overlay))
+ (let ((ol (doc-view-current-overlay)))
+ ;; ol might be a deleted (see `doc-view-new-window-function'), in
+ ;; which case we don't want to modify it.
+ (when (overlay-buffer ol)
+ (let* ((image (if (and file (file-readable-p file))
(if (not (and doc-view-scale-internally
(fboundp 'imagemagick-types)))
(apply 'create-image file doc-view--image-type nil args)
(unless (member :width args)+ ;; In case the window is wider than the image, center the image
(setq args `(,@args :width ,doc-view-image-width)))
(apply 'create-image file 'imagemagick nil args))))
- (slice (doc-view-current-slice)))
+ (slice (doc-view-current-slice))
+ (img-width (and image (car (image-size image))))
+ (displayed-img-width (if (and image slice)
+ (* (/ (float (nth 2 slice))
+ (car (image-size image 'pixels)))
+ img-width)
+ img-width))
+ (window-width (window-width (selected-window))))
(setf (doc-view-current-image) image)
(move-overlay ol (point-min) (point-max))
+ ;; horizontally.
+ (overlay-put ol 'before-string@@ -1287,7 +1303,7 @@
+ (when (and image (> window-width displayed-img-width))
+ (propertize " " 'display
+ `(space :align-to (+ center (-0.5 . ,displayed-img-width))))))
(overlay-put ol 'display
(cond
(image
(vscroll (image-mode-window-get 'vscroll win)))
;; Reset scroll settings, in case they were changed.
(if hscroll (set-window-hscroll win hscroll))
- (if vscroll (set-window-vscroll win vscroll)))))))
+ (if vscroll (set-window-vscroll win vscroll)))))))))
(defun doc-view-sort (a b)
"Return non-nil if A should be sorted before B.
--8<---------------cut here---------------end--------------->8---
Bye,
Tassilo