]> git.eshelyaron.com Git - emacs.git/commitdiff
(doc-view-new-window-function): Be a bit more defensive.
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 1 Feb 2010 18:25:47 +0000 (13:25 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 1 Feb 2010 18:25:47 +0000 (13:25 -0500)
(doc-view-revert-buffer): New command.
(doc-view-mode-map): Use it.

lisp/ChangeLog
lisp/doc-view.el

index 09a5d256464b5e851a6397d077fbf6034399d40c..5f52b138c2dfa35b4d10aa6e226e0f92fdb3e3ae 100644 (file)
@@ -1,3 +1,9 @@
+2010-02-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc-view.el (doc-view-new-window-function): Be a bit more defensive.
+       (doc-view-revert-buffer): New command.
+       (doc-view-mode-map): Use it.
+
 2010-02-01  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * vc-bzr.el (vc-bzr-dir-extra-headers): Add a header when a
index 6ebec982c0c0d19b455f16b76c2ba9aff30358ea..d8a2e90973279785aeef57fc5da7edfa0e961e9b 100644 (file)
@@ -235,8 +235,15 @@ of the page moves to the previous page."
 
 (defun doc-view-new-window-function (winprops)
   (let ((ol (image-mode-window-get 'overlay winprops)))
+    (when (and ol (not (overlay-buffer ol)))
+      ;; I've seen `ol' be a dead overlay.  I do not yet know how this
+      ;; happened, so maybe the bug is elsewhere, but in the mean time,
+      ;; this seems like a safe approach.
+      (setq ol nil))
     (if ol
-        (setq ol (copy-overlay ol))
+        (progn
+          (assert (eq (overlay-buffer ol) (current-buffer)))
+          (setq ol (copy-overlay ol)))
       (assert (not (get-char-property (point-min) 'display)))
       (setq ol (make-overlay (point-min) (point-max) nil t))
       (overlay-put ol 'doc-view t))
@@ -323,12 +330,21 @@ Can be `dvi', `pdf', or `ps'.")
     (define-key map (kbd "C-c C-c")   'doc-view-toggle-display)
     ;; Open a new buffer with doc's text contents
     (define-key map (kbd "C-c C-t")   'doc-view-open-text)
-    ;; Reconvert the current document
-    (define-key map (kbd "g")         'revert-buffer)
-    (define-key map (kbd "r")         'revert-buffer)
+    ;; Reconvert the current document.  Don't just use revert-buffer
+    ;; because that resets the scale factor, the page number, ...
+    (define-key map (kbd "g")         'doc-view-revert-buffer)
+    (define-key map (kbd "r")         'doc-view-revert-buffer)
     map)
   "Keymap used by `doc-view-mode' when displaying a doc as a set of images.")
 
+(defun doc-view-revert-buffer (&optional ignore-auto noconfirm)
+  "Like `revert-buffer', but preserves the buffer's current modes."
+  ;; FIXME: this should probably be moved to files.el and used for
+  ;; most/all "g" bindings to revert-buffer.
+  (interactive (list (not current-prefix-arg)))
+  (revert-buffer ignore-auto noconfirm 'preserve-modes))
+
+
 (easy-menu-define doc-view-menu doc-view-mode-map
   "Menu for Doc View mode."
   '("DocView"